如何从进程 ID 检索主窗口句柄
问题:
如何你能从给定的进程 ID 中检索主窗口句柄吗?您希望将此特定窗口置于最前面,而 Process Explorer 似乎可以无缝执行此操作。
答案:
研究 .NET 使用的机制来确定主窗口显示它使用了 EnumWindows() 函数。以下 C 代码提供了类似的实现:
struct handle_data { unsigned long process_id; HWND window_handle; }; HWND find_main_window(unsigned long process_id) { handle_data data; data.process_id = process_id; data.window_handle = 0; EnumWindows(enum_windows_callback, (LPARAM)&data); return data.window_handle; } BOOL CALLBACK enum_windows_callback(HWND handle, LPARAM lParam) { handle_data& data = *(handle_data*)lParam; unsigned long process_id = 0; GetWindowThreadProcessId(handle, &process_id); if (data.process_id != process_id || !is_main_window(handle)) return TRUE; data.window_handle = handle; return FALSE; } BOOL is_main_window(HWND handle) { return GetWindow(handle, GW_OWNER) == (HWND)0 && IsWindowVisible(handle); }
此代码迭代所有顶级窗口并检查窗口的进程 ID 是否与所需的进程 ID 匹配。如果是,它会进一步验证该窗口是否是主窗口(没有所有者并且可见)并返回其句柄。
以上是如何从 C 中的进程 ID 获取主窗口句柄?的详细内容。更多信息请关注PHP中文网其他相关文章!