zoukankan      html  css  js  c++  java
  • 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
    ",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);
    }
  • 相关阅读:
    Python数组操作将一维数组变成二维数组
    Python做一个计时器的动画
    tkinter添加背景音乐
    IDEA——配置代码检测
    Jenkins构建 前端node项目
    linux下python相关命令
    推荐几个IT交流社区
    jenkins常用插件
    linux上安装newman
    linux+jenkins+postman持续集成
  • 原文地址:https://www.cnblogs.com/coolbear/p/5157403.html
Copyright © 2011-2022 走看看