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);
}
时间: 2024-11-03 21:50:56

Qt 扫描进程列表以及获取进程信息的相关文章

UNIX环境编程学习笔记(21)——进程管理之获取进程终止状态的 wait 和 waitpid 函数

lienhua342014-10-12 当一个进程正常或者异常终止时,内核就向其父进程发送 SIGCHLD信号.父进程可以选择忽略该信号,或者提供一个该信号发生时即被调用的函数(信号处理程序).对于这种信号的系统默认动作是忽略它. 在文档“进程控制三部曲”中,我们讲的第三部曲是使用 wait 函数来获取终止子进程的终止状态.那么,有几个问题我们这里需要详细的学习一下. 1. 父进程一定能够获取到子进程的终止状态吗?如果子进程在父进程调用 wait 函数前就终止了,怎么办? 2. 如果父进程没有获

【.net 深呼吸】启动一个进程并实时获取状态信息

地球人和火星人都知道,Process类既可以获取正在运行的进程,也可以启动一个新的进程.在79.77%应用场合,我们只需要让目标进程顺利启动就完事了,至于它执行了啥,有没有出错,啥时候退出就不管了. 但是,在某些情况下,启动新进程后,还希望能向目标进程传送数据,或者实时读取来自新进程的信息.比如,启动一个安装程序,安装程序会向标准流写入安装进度,然后调用方可以从标准流中读取进度,以达到实时监控安装进度的目的. Process类公开三个标准流属性: StandardInput——输入流.类型是Wr

delphi中获得进程列表或想要的进程(枚举进程、遍历进程)

一个常见的编程任务是枚举所有运行的"应用程序".Windows 任务管理器就是一个很好的例子.它用两种方式列出"应用程序".任务管理器的第一个选项卡列出桌面上的所有"应用程序窗口".第二个选项卡列出系统中的所有"进程".本文提供了如何执行这些任务的详细信息. 枚举顶层窗口如果将枚举进程与枚举桌面上的顶层窗口进行比较,那么枚举顶层窗口可能更容易一些.要枚举顶层窗口,请使用 EnumWindows() 函数.不要使用 GetWin

linux -- 进程的查看、进程id的获取、进程的杀死

进程查看 ps ax : 显示当前系统进程的列表 ps aux : 显示当前系统进程详细列表以及进程用户 ps ax|less : 如果输出过长,可能添加管道命令 less查看具体进程, 如:ps ax|grep XXX(XXX为进程名称) 获取进程id shell获取进程ID的方法: ps -A |grep "cmdname"| awk '{print $1}' pidof "cmdname" pgrep "cmdname" 这三种在bash和

获取进程列表及相关信息

闲着没事,看着任务管理器好玩,查资料先简单实现一下,代码中没有加入获取CPU占用率的代码,这个代码网上很多,只是不喜欢那种写法,这里就不写了.以后继续完善,对于System Process和System的信息还没法获得,那位兄弟知道可以提个醒. 代码如下 [delphi] view plaincopy unit Main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Form

奇淫巧技之程序启动后在进程列表中隐藏密码等关键信息2

在上一篇总结中,在进程列表中隐藏密码是通过在main函数中做处理来隐藏的. 如下: 1 int _main(int argc, char* argv[], char** envp) { 2 3 省略中间一些代码内容 4 5 // hide password from ps output 6 7 for (int i = 0; i < (argc - 1); ++i) { 8 9 if (!strcmp(argv[i], "-p") || !strcmp(argv[i], &quo

获取进程列表

获取进程列表: public static string GetProcessList() { string str=""; Process[] processes=Process.GetProcesses(); Process proces; for (int i=0;i<processes.Length;i++) { proces=processes[i]; str += Convert.ToString(proces.Id) + ":" + proces

Python &amp; Ubuntu 获取进程信息

备忘,其实是想知道该进程使用的内存状况. 首先要获取系统的内存信息: def memory_stat():    '''        return the memory info    '''    mem = {}    stat = {}    f = open('/proc/meminfo')    lines = f.readlines()    for line in lines:        if len(line) < 2 : continue        name = li

linux中使用top获取进程的资源占用信息

在linux中使用top获取进程的资源占用信息: Cpu(s):  1.0%us,  0.0%sy,  0.0%ni, 98.3%id,  0.7%wa,  0.0%hi,  0.0%si,  0.0%st Mem: 8057964k total, 7938708k used, 119256k free, 132132k buffers 输入h获取帮助信息 o:改变列的先后顺序 F或O:选择由大到小排序的列 f:查看每列代表的含义 按cup大小排序,列出所有进程:top -ab -n 1 查看某