使用CreateToolHelp32Snapshot函數列出所有進程
轉載:https://blog.csdn.net/u012877472/article/details/49718915
列出所有進程,需要調用CreateToolHelp32Snapshot函數先得到系統進程快照的句柄,函數包含在<tlhelp32.h>頭中。函數的具體格式如下:
HANDLE CreateToolhelp32Snapshot( [in] DWORD dwFlags, [in] DWORD th32ProcessID );
如果函數調用成功返回快照句柄,否則返回INVALID_HANDLE_VALUE。在得到系統進程快照句柄之后,需要調用Process32First函數查找系統進程快照中的第一個進程:
BOOL Process32First( [in] HANDLE hSnapshot, [in, out] LPPROCESSENTRY32 lppe );
再調用Process32Next函數列出系統中其它進程
BOOL Process32Next( [in] HANDLE hSnapshot, [out] LPPROCESSENTRY32 lppe );
兩個函數的參數是一樣的,其中hSnapshot是由CreateToolHelp32Snapshot函數返回的系統進程快照的句柄;而lppe是指向PROCESSENTRY的結構體指針,進程的詳細信息保存在結構體中。PROCESSENTRY32結構體定義如下:
typedef struct tagPROCESSENTRY32 { DWORD dwSize; DWORD cntUsage; DWORD th32ProcessID; ULONG_PTR th32DefaultHeapID; DWORD th32ModuleID; DWORD cntThreads; DWORD th32ParentProcessID; LONG pcPriClassBase; DWORD dwFlags; CHAR szExeFile[MAX_PATH]; } PROCESSENTRY32;
當上述兩個函數列舉到進程時返回TRUE,否則返回FALSE。當列舉到一個進程時lppe參數就會返回進程的詳細信息,所以用戶就可以讀取這些進程的信息,然后輸出。
列舉完后,需要調用CloseHandle函數關閉系統進程句柄

浙公網安備 33010602011771號