任務管理器核心功能:枚舉頂層視窗與系統進程。視窗用 EnumWindows (回調 + LPARAM) 避免 Z-Order 干擾;進程枚舉因平台差異需分庫處理:
| 系統 | 庫 | 關鍵函數 |
|---|---|---|
| Win9x/Me/2000/XP | ToolHelp32 (KERNEL32.dll) | CreateToolhelp32Snapshot, Process32First/Next |
| Windows NT 4.0 | PSAPI (PSAPI.dll) | EnumProcesses, EnumProcessModules, GetModuleFileNameEx |
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS) 獲取快照句柄Process32First 取首項,PROCESSENTRY32.dwSize 必須預設Process32Next 直到 FALSE,提取 th32ProcessID、szExeFileCloseHandle 釋放快照EnumProcesses 直到 cbNeeded < cb (文檔不保證一次足夠)OpenProcess → EnumProcessModules 取首模組句柄 → GetModuleFileNameEx/BaseName 取路徑/名稱NTVDM (虛擬 DOS 機) 中運行。先 VDMEnumProcessWOW 列舉含 WowExec.exe 的 NTVDM 進程,再對每 PID 調用 VDMEnumTaskWOWEx 列舉任務,回調提供模組名、檔案名、16 位句柄。需鏈接 VDMDBG.lib、包含 vdmdbg.h。
BOOL WINAPI EnumProcs(PROCENUMPROC lpProc, LPARAM lParam);
// 回調原型
BOOL CALLBACK Proc(DWORD dwPID, WORD w16Task, LPCSTR lpstrFile, LPARAM lParam);
// w16Task=0 表示 32 位進程;9x 下恆為 0
內部動態載入 ToolHelp32/PSAPI/VDMDBG (顯式鏈接 LoadLibrary/GetProcAddress),實現二進制級跨平台相容。附帶完整封裝源碼,可直接集成專案。