Win32 API功能封装
+ -

根据进程名获取进程ID

2021-08-30 362 0

打开设备管理器,会看到系统当前所有运行的进程,运行时信息包括进程名,进程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;

0 篇笔记 写笔记

根据进程名获取进程ID
打开设备管理器,会看到系统当前所有运行的进程,运行时信息包括进程名,进程ID等。设备管理器默认不显示进程名,可点击 查看>>选择名>>进程ID但假如已知运行了一个进程,想通过编程的方法来获取进程ID,请看下列代码#include#incl......
获取或修改指定进程ID的内存数据
进程ID已知的前提下,如何获取该进程在内存中的数据,下面提供一种方法。void GetProcessMemory(ULONG PID,,PVOID PVOID pRaddAddr){ PROCESS_INFORMATION pi; ZeroMemory(&pi, si......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

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

您的支持,是我们前进的动力!