[英]How to get HWND in win32?
有沒有辦法讓我的窗口的HWND處理程序?
我正在使用win32。
您可以調用GetActiveWindow來獲取應用程序中的活動控件,然后在返回的句柄上重復調用GetParent,直到它返回NULL。 您獲得的最后一個有效句柄應該是主窗口的句柄。
正如其他人所說,更簡單的方法是將CreateWindow返回的值存儲在某個地方。
您不是通過CreateWindow()
或CreateWindowEx()
創建窗口的嗎? CreateWindowEx()函數和CreateWindow()函數均返回新創建的窗口的HWND
。
另外,操作系統會通過窗口過程將窗口的HWND
傳遞給您 。 這不是您要調用的函數。 它是操作系統調用的一項功能,可讓您的應用程序執行所需的任何處理。
了解為什么沒有簡單的方法可能很好。 都歸結為“ 哪個窗口?”。 您現在可能會在屏幕上看到多個窗口。 例如,屏幕底部的任務欄是一個窗口。 甚至您自己的應用程序通常也有多個。 例如,“文件保存”對話框是一個窗口。 甚至簡單的MessageBox
都是一個窗口。
那么,你怎么確定你是在談論哪個窗口? 常見的答案是通過HWND
識別它們。 因此,要獲取“文件保存”對話框窗口的位置,請要求與該HWND關聯的位置。 顯然,您可以通過這種方式獲得任何屬性, 但 HWND
本身除外 ! 詢問HWND(0x5e21)
的X / Y位置HWND(0x5e21)
,但是詢問哪個HWND
屬於HWND(0x5e21)
是愚蠢的。
現在,可能會發生另一個或多或少的唯一屬性,並且您想從中獲得HWND
。 例如,您可能有一個X / Y位置。 在這種情況下, WindowFromPoint(xy)
將在該位置返回HWND
。
但是最常見的情況是您需要對窗口的Windows消息做出反應。 在這種情況下,您將獲得窗口的HWND
作為WindowProc()
的第一個參數。
因此,除非您告訴我們您擁有什么獨特信息,否則我們將無法告訴您如何找到匹配的HWND
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.