EnumProcess 實現枚舉進程
阿新 • • 發佈:2018-10-08
brush int pst sizeof 應用 代碼 實現 names sim
BOOL WINAPI EnumProcesses ( _Out_writes_bytes_(cb) DWORD * lpidProcess, _In_ DWORD cb, _Out_ LPDWORD lpcbNeeded ); HANDLE OpenProcess( DWORD dwDesiredAccess, // access flag BOOL bInheritHandle, // handle inheritance option DWORD dwProcessId // process identifier ); BOOL WINAPI QueryFullProcessImageNameA( _In_ HANDLE hProcess, _In_ DWORD dwFlags, _Out_writes_to_(*lpdwSize, *lpdwSize) LPSTR lpExeName, _Inout_ PDWORD lpdwSize ); 函數使用起來都比較方便,參數不說了,需要註意使用EnumProcess要包涵#include <Psapi.h>,以及對應的導入庫lib 具體代碼示例如下: #include "stdafx.h" #include <Windows.h> #include <string> #include <Psapi.h> #pragma comment (lib, "Psapi.lib") using namespace std; int _tmain(int argc, _TCHAR* argv[]) { DWORD dwProcessID[0x500] = { 0 }; //開始的預先分配較大的緩沖區,用來存放進程ID DWORD dwNeeded = 0; BOOL bEnumRes = EnumProcesses(dwProcessID, sizeof(dwProcessID), &dwNeeded); UINT uCount = dwNeeded / sizeof(DWORD);//獲得枚舉到進程的數量 for (UINT i = 0; i < uCount; i++) { //只對進程進程枚舉,所以申請QUERY權限,具體還得根據應用申請權限 HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, dwProcessID[i]); if (NULL !=hProcess) { CHAR szProcessName[0x50] = { 0 }; DWORD dwNameLen = 0x50; BOOL bRet = QueryFullProcessImageNameA(hProcess, 0, szProcessName, &dwNameLen); if (bRet) { printf("ID:%4d\tprocessName(%s)\n", dwProcessID[i], szProcessName); } } } getchar(); return 0; }
EnumProcess 實現枚舉進程