名前でプロセスのハンドルを取得するには、CreateToolhelp32Snapshot 関数を利用できます。システムのプロセスのスナップショットを取得します。この関数は、プロセス名など、実行中のプロセスに関する情報へのアクセスを提供します。
次のコード スニペットは、CreateToolhelp32Snapshot と Process32Next を使用してプロセスを検索する方法を示しています。名前を付けてそのハンドルを取得します:
#include <cstdio> #include <windows.h> #include <tlhelp32.h> int main(int, char *[]) { PROCESSENTRY32 entry; entry.dwSize = sizeof(PROCESSENTRY32); HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (Process32First(snapshot, &entry) == TRUE) { while (Process32Next(snapshot, &entry) == TRUE) { if (stricmp(entry.szExeFile, "target.exe") == 0) { HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, entry.th32ProcessID); // Do stuff with the process... CloseHandle(hProcess); } } } CloseHandle(snapshot); return 0; }
必要な場合PROCESS_ALL_ACCESS にアクセスするには、SE_DEBUG_NAME 権限を一時的に有効にする必要がある場合があります。その方法は次のとおりです:
#include <cstdio> #include <windows.h> #include <tlhelp32.h> void EnableDebugPriv() { HANDLE hToken; LUID luid; TOKEN_PRIVILEGES tkp; OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken); LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid); tkp.PrivilegeCount = 1; tkp.Privileges[0].Luid = luid; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken, false, &tkp, sizeof(tkp), NULL, NULL); CloseHandle(hToken); } int main(int, char *[]) { EnableDebugPriv(); // ... (Code from previous example)... return 0; }
以上がC でプロセス ハンドルを名前で取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。