有没有办法获得窗口的HWND处理程序?
我正在使用win32。
答案 0 :(得分:7)
您可以调用GetActiveWindow来获取应用程序中的活动控件,然后在返回的句柄上重复调用GetParent,直到它返回NULL。您获得的最后一个有效句柄应该是主窗口的句柄。
其他人说的更简单的方法是将CreateWindow的返回值存储在某个地方。
答案 1 :(得分:6)
您是不是通过CreateWindow()
或CreateWindowEx()
创建了自己的窗口? CreateWindowEx() function和CreateWindow()函数都返回新创建的窗口的HWND
。
此外,操作系统会向您传递窗口HWND
via your window procedure。这不是你打电话的功能;它是操作系统调用的函数,让您的应用程序执行任何所需的处理。
答案 2 :(得分:6)
理解为什么没有简单的方法可能会很好。这一切归结为“哪个窗口?”。您现在可能会在屏幕上看到多个窗口。例如,屏幕底部的任务栏是一个窗口。即使你自己的应用程序通常有多个。例如,“文件保存”对话框是一个窗口。即使是简单的MessageBox
也是一个窗口。
那么,您如何识别您正在谈论的窗口?常见的答案是,您可以通过HWND
来识别它们。因此,要获取“文件保存”对话框窗口的位置,请求与该HWND关联的位置。显然,你可以通过这种方式获得任何属性,除了 HWND
本身!询问HWND(0x5e21)
的X / Y位置是有意义的,但询问哪个HWND
属于HWND(0x5e21)
是愚蠢的。
现在,您可能会遇到另一个或多或少的唯一属性,并希望从中获取HWND
。例如,您可能有X / Y位置。在这种情况下,WindowFromPoint(xy)
将返回该位置的HWND
。
但最常见的情况是您需要对窗口的Windows消息作出反应。在这种情况下,您会将HWND
窗口作为WindowProc()
的第一个参数。
因此,除非您告诉我们您拥有哪些独特信息,否则我们无法告诉您如何找到匹配的HWND
。