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);
}

 

转载于:https://www.cnblogs.com/coolbear/p/5157403.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值