Qt 扫描进程列表以及获取进程信息
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt 扫描进程列表以及获取进程信息相关的知识,希望对你有一定的参考价值。
使用方法:
QMap<QString,qint64> app_pid;
getAllAppPidList( app_pid );
#include <tlhelp32.h>// for CreateToolhelp32Snapshot
#include <Psapi.h> // for GetModuleFileNameEx
#define FORMAT_PATH(path) path.replace(‘\\‘,‘/‘).toLower()
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\n",pe32.szExeFile); //printf("进程ID:%u\n\n",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 来获取后台进程列表是私人电话吗?