首頁 >後端開發 >C++ >如何使用進程 ID 取得主視窗句柄?

如何使用進程 ID 取得主視窗句柄?

Patricia Arquette
Patricia Arquette原創
2024-12-08 14:51:11183瀏覽

How to Get the Main Window Handle Using a Process ID?

如何使用進程ID 擷取主視窗句柄:

要擷取行程的主視窗句柄,您可以使用下列方法步驟:

  1. 利用EnumWindows()函數列舉所有頂層
  2. 在回呼函數 enum_windows_callback() 中,檢查與目前視窗關聯的程序 ID 是否與目標程序 ID 相符。
  3. 如果找到匹配,則確定是否存在通過驗證當前視窗是否沒有所有者(GetWindow(handle, GW_OWNER) == (HWND)0) 並且可見,當前視窗是主視窗(IsWindowVisible(handle) = = TRUE)。
  4. 辨識主視窗後,將其句柄儲存在handle_data結構中,並傳回FALSE以停止枚舉。

這裡是範例程式碼實作以下步驟:

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 取得主視窗句柄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn