知道进程id如何找到进程的界面窗口句柄实例
时间: 2023-07-28 20:10:10 浏览: 79
CS获取进程主窗口句柄代码
5星 · 资源好评率100%
以下是一个使用 C++ 实现的示例代码,用于根据进程 ID 查找进程的界面窗口句柄:
```cpp
#include <Windows.h>
#include <TlHelp32.h>
#include <vector>
// 根据进程 ID 查找进程的界面窗口句柄
HWND FindProcessWindow(DWORD pid)
{
HWND result = NULL;
// 打开进程
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pid);
if (hProcess == NULL)
return NULL;
// 枚举顶级窗口
std::vector<HWND> windows;
EnumWindows([](HWND hwnd, LPARAM lParam) -> BOOL
{
std::vector<HWND>* windows = reinterpret_cast<std::vector<HWND>*>(lParam);
DWORD processId = 0;
GetWindowThreadProcessId(hwnd, &processId);
if (processId == GetCurrentProcessId() || processId == 0)
return TRUE;
windows->push_back(hwnd);
return TRUE;
}, reinterpret_cast<LPARAM>(&windows));
// 遍历窗口,查找属于目标进程的可见窗口
for (auto hwnd : windows)
{
DWORD processId = 0;
GetWindowThreadProcessId(hwnd, &processId);
if (processId == pid && IsWindowVisible(hwnd))
{
result = hwnd;
break;
}
}
CloseHandle(hProcess);
return result;
}
int main()
{
// 查找进程的界面窗口句柄
DWORD pid = 1234; // 请替换成目标进程的进程 ID
HWND hwnd = FindProcessWindow(pid);
if (hwnd != NULL)
{
// 将窗口设置为当前活动窗口
SetForegroundWindow(hwnd);
}
return 0;
}
```
该示例代码首先通过函数`OpenProcess`打开进程句柄,然后使用函数`EnumWindows`枚举系统中所有的顶级窗口。对于每个窗口,使用函数`GetWindowThreadProcessId`获取窗口所属的进程 ID,如果窗口所属的进程 ID 与目标进程的 ID 相同,则说明该窗口属于目标进程。然后使用函数`IsWindowVisible`判断窗口是否可见,如果可见则说明该窗口是目标进程的界面窗口。
最后,如果找到了目标进程的界面窗口,则可以使用函数`SetForegroundWindow`将该窗口设置为当前活动窗口。注意,该函数只能将前台窗口设置为活动窗口,如果目标窗口被其他窗口遮挡,则需要使用其他方法将其置顶。
阅读全文