windows下获取运行的可执行程序句柄
时间: 2024-02-11 22:04:02 浏览: 87
可以使用Win32 API函数EnumWindows和GetWindowThreadProcessId获取运行的可执行程序句柄。
EnumWindows函数可以枚举所有顶级窗口,通过回调函数对每个窗口进行处理。例如:
```c++
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
DWORD processId;
GetWindowThreadProcessId(hwnd, &processId);
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processId);
if (hProcess != NULL)
{
TCHAR szExeName[MAX_PATH];
if (GetModuleFileNameEx(hProcess, NULL, szExeName, MAX_PATH) > 0)
{
// 处理可执行程序句柄
// ...
}
CloseHandle(hProcess);
}
return TRUE;
}
EnumWindows(EnumWindowsProc, 0);
```
其中,GetWindowThreadProcessId函数可以获取窗口所属的进程ID;OpenProcess函数可以打开进程句柄;GetModuleFileNameEx函数可以获取进程的可执行文件路径。
在回调函数中,可以根据需要对可执行程序进行处理。例如,可以判断可执行程序是否为指定的程序,并记录其句柄。
注意,枚举窗口需要具有足够的权限,否则会出现访问权限错误。如果程序没有足够的权限,可以尝试以管理员权限运行程序。
阅读全文