簡體   English   中英

如何在win32中獲得HWND?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM