知道进程id如何找到进程的界面窗口句柄实例
时间: 2023-07-28 09:10:10 浏览: 102
通过进程ID找到窗口句柄.
4星 · 用户满意度95%
以下是一个示例代码,可以根据进程ID找到其对应的界面窗口句柄:
```c++
#include <iostream>
#include <Windows.h>
using namespace std;
// 回调函数,用于枚举窗口
BOOL CALLBACK EnumWindowProc(HWND hwnd, LPARAM lParam)
{
DWORD processId;
GetWindowThreadProcessId(hwnd, &processId); // 获取窗口所属的进程ID
if (processId == (DWORD)lParam) // 如果进程ID匹配,记录下窗口句柄并返回FALSE
{
HWND* pWnd = (HWND*)lParam;
*pWnd = hwnd;
return FALSE;
}
return TRUE;
}
// 根据进程ID获取窗口句柄
HWND GetWindowHandleFromProcessId(DWORD processId)
{
HWND hwnd = NULL;
EnumWindows(EnumWindowProc, (LPARAM)&hwnd); // 枚举所有窗口
return hwnd;
}
int main()
{
DWORD processId = 1234; // 假设要查找的进程ID为1234
HWND hwnd = GetWindowHandleFromProcessId(processId);
if (hwnd != NULL)
{
cout << "找到窗口句柄:" << hwnd << endl;
}
else
{
cout << "未找到窗口句柄" << endl;
}
return 0;
}
```
在上面的代码中,`EnumWindowProc`函数是一个回调函数,用于枚举所有窗口。`GetWindowThreadProcessId`函数可以获取某个窗口所属的进程ID。如果进程ID匹配,就记录下窗口句柄并返回FALSE,表示枚举结束。
`GetWindowHandleFromProcessId`函数则是根据进程ID来查找窗口句柄的入口函数。它通过调用`EnumWindows`函数来枚举所有窗口,然后调用`EnumWindowProc`函数来逐个判断窗口所属的进程ID是否匹配。如果匹配,则返回对应的窗口句柄。
阅读全文