首頁 >後端開發 >C++ >如何以程式設計方式從 C 中的進程 ID 擷取主視窗句柄?

如何以程式設計方式從 C 中的進程 ID 擷取主視窗句柄?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-30 20:17:10674瀏覽

How Can I Programmatically Retrieve the Main Window Handle from a Process ID in C  ?

從進程ID 擷取主視窗句柄

在各種場景中,有必要與與給定進程關聯的特定視窗進行交互。要實現這一點,獲取視窗句柄至關重要。雖然 Process Explorer 實用程式毫不費力地提供了此功能,但此查詢深入研究了底層機制,以程式設計方式從 C 中的進程 ID 派生主視窗句柄。

此檢索的關鍵在於枚舉系統內的所有視窗並根據進程 ID 以及它們是否有資格作為主視窗來過濾它們。以下是流程的細分:

  1. EnumWindows() 枚舉:
    EnumWindows() 函數迭代桌面上的所有頂級窗口,調用回調函數對於每個視窗。
  2. 回呼功能:
    在回呼函數中,我們提取與目前視窗關聯的進程ID。如果它與目標進程 ID 匹配,我們使用 is_main_window() 函數進一步檢查該視窗是否符合主視窗的條件。
  3. 主視窗條件:
    is_main_window ()函數判斷目前視窗是否符合下列條件標準:

    • 它沒有擁有者視窗(由GetWindow(handle, GW_OWNER) 傳回(HWND)0 指示)。
    • 它是可見的(透過 IsWindowVisible(handle) 檢查)。
  4. 匹配視窗選擇:
    如果進程ID和主視窗條件都滿足,則將對應的視窗句柄儲存在handle_data結構中。

透過這個迭代過程,find_main_window()函數有效地找出與指定進程 ID 關聯的主視窗。

以上是如何以程式設計方式從 C 中的進程 ID 擷取主視窗句柄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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