從進程ID 擷取主視窗句柄
為了將特定視窗帶到前台,了解如何取得其來自其流程ID 的主窗口句柄至關重要。此過程通常用於管理視窗並使它們成為焦點。
使用 .NET 和 EnumWindows() 的解決方案
存在利用 EnumWindows() 的 .NET 實作來識別主視窗。此函數枚舉系統中的所有頂級窗口,讓您可以找到與特定進程關聯的窗口。
C 程式碼實作
這是一段C 程式碼片段示範了與.NET 實作相同的方法:
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 和可見性條件,則視窗句柄將儲存在 handle_data 結構中。
透過使用此回呼函數呼叫 EnumWindows(),您可以迭代所有頂級窗口,識別主窗口window來尋找指定的進程ID,並取得其句柄。然後可以使用該句柄將視窗置於前面或執行其他與視窗相關的操作。
以上是如何從 .NET 和 C 中的進程 ID 取得主視窗句柄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!