當我們寫某些破壞性的程式時就需要對進程進行遍歷和提取ID
對於上述功能,我們先介紹幾個API
1.CreateToolhelp32Snapshout function
1.CreateToolhelp32Snapshout function
1.CreateToolhelp32Snapshout function
1.CreateToolhelp32Snapshout function
1.CreateToolhelp32Snapshout function
1.CreateToolhelp32Snapshout function
的快照
語法如下:
HANDLE WINAPI CreateToolhelp32Snapshot( _In_ DWORD dwFlags, _In_ DWORD th32ProcessID );第一個參數:快照包含了系統的一部分,參數如下:
typedef struct tagPROCESSENTRY32 { DWORD dwSize; DWORD cntUsage; DWORD th32ProcessID; ULONG_PTR th32DefaultHeapID; DWORD th32ModuleID; DWORD cntThreads; DWORD th32ParentProcessID; LONG pcPriClassBase; DWORD dwFlags; TCHAR szExeFile[MAX_PATH]; } PROCESSENTRY32, *PPROCESSENTRY32;
這裡只介紹szExeFile[MAX_PATH]和
szExeFile:進程的名稱在執行檔的名稱原始碼!部分函數沒有解說,但可以透過註解或字面上可以了解
#include <Windows.h> #include <stdio.h> #include <TlHelp32.h> int main() { HANDLE hProceessnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hProceessnap == INVALID_HANDLE_VALUE) { printf_s("创建进行快照失败\n"); return -1; } else { PROCESSENTRY32 pe32; pe32.dwSize = sizeof(pe32); BOOL hProcess = Process32First(hProceessnap, &pe32); char buff[1024]; while (hProcess) { wsprintf(buff, "进程名:%s--------------------进程ID:%d", pe32.szExeFile, pe32.th32ParentProcessID); printf_s("%s\n", buff); memset(buff, 0x00, 1024); hProcess = Process32Next(hProceessnap, &pe32); } } CloseHandle(hProceessnap); return 0; }
運作結果如下
行程結果如下
上述內容請關注PHP中文網(www.php.cn)! 🎜🎜