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);
    }
  • 相关阅读:
    dota监測
    C++ new malloc realloc
    LeetCode240:Search a 2D Matrix II
    Mentor.Graphics.FloTHERM.XT.2.3+Mentor.Graphics.Flowmaster.7.9.4
    怎样在Linux下使用Markdown进行文档工作
    用 Arduino Uno 给 Arduino Mini(Pro)烧录程序
    jQuery事件对象
    asp.net 获取系统的根目录
    C语言中将数字转换为字符串的方法
    ubuntu 12.04 64位设置兼容32位的实现
  • 原文地址:https://www.cnblogs.com/coolbear/p/5157403.html
Copyright © 2011-2022 走看看