代码如下:
#include "widget.h"
#include "ui_widget.h"
#include <QProcess>
Widget::Widget(QWidget *parent)
: QWidget(parent), ui(new Ui::Widget)
{
ui->setupUi(this);
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(slotGet()));
}
void Widget::slotGet()
{
ui->listWidget->clear();
this->processID.clear();
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(pe32);
HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hProcessSnap == INVALID_HANDLE_VALUE)
{
printf("CreateToolhelp32Snapshot 调用失败");
return;
}
bool bMore = ::Process32First(hProcessSnap,&pe32);
while(bMore)
{
ui->listWidget->addItem(QString::fromWCharArray(pe32.szExeFile));
this->processID << pe32.th32ProcessID;
qDebug() << GetProcessPath(pe32.th32ProcessID);
bMore = ::Process32Next(hProcessSnap,&pe32);
}
::CloseHandle(hProcessSnap);
}
QString Widget::GetProcessPath( DWORD idProcess )
{
// 获取进程路径
WCHAR name[1024];
ZeroMemory(name,1024);
// 打开进程句柄
HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, idProcess );
if( NULL != hProcess )
{
DWORD cbNeeded;
HMODULE hMod;
// 获取路径
if(::EnumProcessModules(hProcess,&hMod,sizeof(hMod),&cbNeeded))
DWORD dw = ::GetModuleFileNameExW(hProcess, hMod, name, 1024 );
CloseHandle( hProcess );
}
return QString::fromWCharArray(name);
}
Widget::~Widget()
{
delete ui;
}
包含了应有的头文件了
#include <windows.h>
#include <tlhelp32.h>
#include <psapi.h>
QT编辑器在编写的过程中,方法EnumProcessModules和GetModuleFileNameExW都有提示的,但编译的时候却提示我没有定义这两个方法,是什么原因呢?