根据进程名获取进程ID

打开设备管理器,会看到系统当前所有运行的进程,运行时信息包括进程名,进程ID等。
设备管理器默认不显示进程名,可点击 查看>>选择名>>进程ID
但假如已知运行了一个进程,想通过编程的方法来获取进程ID,请看下列代码

#include<windows.h>
#include <TlHelp32.h>

ULONG GetProcessIdByName(TCHAR* pName)
{
    PROCESSENTRY32 pe32;
    pe32.dwSize = sizeof(pe32);// 在使用这个结构之前,先设置它的大小
    // 给系统内的所有进程拍一个快照
    HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (hProcessSnap == INVALID_HANDLE_VALUE)
    {
        MessageBox(L"CreateToolhelp32Snapshot调用失败");
        return 0;
    }

    // 遍历进程快照,轮流显示每个进程的信息
    BOOL bMore = ::Process32First(hProcessSnap, &pe32);

    CString e = pName;
    while (bMore)
    {
        //可能存在多个同名的进程
        //这里只获取第一个进程
        if (e == pe32.szExeFile)
        {
            return pe32.th32ProcessID;
        }
        bMore = ::Process32Next(hProcessSnap, &pe32);
    }

    // 不要忘记清除掉snapshot对象
    ::CloseHandle(hProcessSnap);
    return 0;
}

PROCESSENTRY32是一个进程基本信息结构,可获取地信息比较多,但一般有用的也就进程ID和进程名。

typedef struct tagPROCESSENTRY32
{
    DWORD   dwSize;
    DWORD   cntUsage;
    DWORD   th32ProcessID;          // this process
    ULONG_PTR th32DefaultHeapID;
    DWORD   th32ModuleID;           // associated exe
    DWORD   cntThreads;
    DWORD   th32ParentProcessID;    // this process's parent process
    LONG    pcPriClassBase;         // Base priority of process's threads
    DWORD   dwFlags;
    CHAR    szExeFile[MAX_PATH];    // Path
} PROCESSENTRY32;
typedef PROCESSENTRY32 *  PPROCESSENTRY32;
typedef PROCESSENTRY32 *  LPPROCESSENTRY32;
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

Powered by bytekits.com,汇天下文字,成非凡梦想!!!