通過進程名獲取進程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