Qt扫描进程列表以及获取进程信息
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt扫描进程列表以及获取进程信息相关的知识,希望对你有一定的参考价值。
使用方法:
QMap<QString,qint64> app_pid;
getAllAppPidList( app_pid );
#include <Windows.h>
#include <tlhelp32.h>// for CreateToolhelp32Snapshot
#include <Psapi.h> // for GetModuleFileNameEx
#define FORMAT_PATH(path) path.replace(‘\‘,‘/‘).toLower()
#pragma comment(lib, "psapi.lib")
QString GetPathByProcessID(DWORD pid)
{
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
if (!hProcess)
{
//QMessageBox::warning(NULL,"GetPathByProcessID","无权访问该进程");
return "";
}
WCHAR filePath[MAX_PATH];
DWORD ret= GetModuleFileNameEx(hProcess, NULL, filePath, MAX_PATH) ;
QString file = QString::fromStdWString( filePath );
//QMessageBox::warning(NULL,"GetPathByProcessID ret=", QString::number(ret)+":"+file);
CloseHandle(hProcess);
return ret==0?"":file;
}
void UDPClient::getAllAppPidList(QMap<QString,qint64>& app_pid)
{
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(pe32);
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hProcessSnap == INVALID_HANDLE_VALUE)
{
warningLabel->setText("CreateToolhelp32Snapshot调用失败");
return ;
}
BOOL bMore = Process32First(hProcessSnap,&pe32);
while(bMore)
{
//printf("进程名称:%s
",pe32.szExeFile);
//printf("进程ID:%u
",pe32.th32ProcessID);
QString exeName = (QString::fromUtf16(reinterpret_cast<const unsigned short *>(pe32.szExeFile)));
QString exePath = GetPathByProcessID( pe32.th32ProcessID );
exePath = FORMAT_PATH( exePath );
if( exePath.isEmpty() )
{
warningLabel->setText("获取进程 " + exeName + " 路径失败");
}
else
{
app_pid[exePath] = pe32.th32ProcessID;
}
bMore = Process32Next(hProcessSnap,&pe32);
}
CloseHandle(hProcessSnap);
}
以上是关于Qt扫描进程列表以及获取进程信息的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 上调用 sysctl 来获取后台进程列表是私人电话吗?