通过进程名获取进程ID


来源:https://blog.csdn.net/Bdyjy/article/details/53096891?utm_source=blogxgwz5

通过遍历系统中所有进程的进程名来获得目标进程的ID。

要遍历系统中所有的进程我们需要以下三个函数:
1、CreateToolhelp32Snapshot
函数原型:

HANDLE WINAPI CreateToolhelp32Snapshot( _In_ DWORD dwFlags, _In_ DWORD th32ProcessID );

 

MSDN地址:https://msdn.microsoft.com/en-us/library/windows/desktop/ms682489(v=vs.85).aspx

这个函数的作用是:Takes a snapshot of the specified processes, as well as the heaps, modules, and threads used by these processes.即建立一个指定进程的快照。

参数:
dwFlags:快照的类型,我们这里选择TH32CS_SNAPPROCESS,表示所有进程。
th32ProcessID:要包括在快照中的进程ID,我们设为0,表示当前进程。

返回值:
成功返回快照句柄,失败返回INVALID_HANDLE_VALUE;

2、Process32First
函数原型:

BOOL WINAPI Process32First( _In_ HANDLE hSnapshot, _Inout_ LPPROCESSENTRY32 lppe );

 

MSDN地址:https://msdn.microsoft.com/en-us/library/windows/desktop/ms684834(v=vs.85).aspx

这个函数的作用是:取得快照中第一个进程信息。

参数:
hSnapshot:快照句柄
lppe:一个PROCESSENTRY32结构的指针,用来保存进程相关的信息,其中th32ProcessID成员保存着次进程的ID。

返回值:
成功返回true,失败返回false。

3、Process32Next
函数原型:

BOOL WINAPI Process32Next( _In_ HANDLE hSnapshot, _Out_ LPPROCESSENTRY32 lppe );

 

MSDN地址:https://msdn.microsoft.com/en-us/library/windows/desktop/ms684836(v=vs.85).aspx

这个函数的作用是:返回快照中下一个进程的信息。
参数:
hSnapshot:和上一个函数一样,也是快照句柄
lppe:也和上一个函数一样

返回值:
成功返回true,失败返回false

所以流程是先调用CreateToolhelp32Snapshot获取所有进程快照,再调用Process32First,然后不停调用Process32Next,直到Process32Next返回false,完成遍历。在每次调用Process32Next时比较此进程的进程名与目的进程名,相同则返回进程id退出循环。
代码如下:

#include <TlHelp32.h> // 头文件 bool m_GetPIDByName(TCHAR * processName) { // 创建系统快照 HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hSnapshot == INVALID_HANDLE_VALUE) { return false; } PROCESSENTRY32 ps; ZeroMemory(&ps, sizeof(PROCESSENTRY32)); ps.dwSize = sizeof(PROCESSENTRY32); if (!Process32First(hSnapshot, &ps)) { return false; } do { if (lstrcmpi(ps.szExeFile, processName) == 0) { // 保存进程ID m_pID = ps.th32ProcessID; CloseHandle(hSnapshot); return true; } } while (Process32Next(hSnapshot, &ps)); return false; }


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM