获取非客户端“关闭”按钮的 hWnd [x] (win32)
Posted
技术标签:
【中文标题】获取非客户端“关闭”按钮的 hWnd [x] (win32)【英文标题】:Get the hWnd of the non-client "close" button [x] (win32) 【发布时间】:2012-10-20 12:48:57 【问题描述】:我的应用需要显示一个指向upper-right
角[x]
按钮的信息气球,指示必须通过单击pointed [x]
按钮关闭窗口。
出于这个原因,我需要获得[x]
按钮hWnd
或者如果知道它的(未记录的)资源ID。你们知道如何用普通的win32?
来做到这一点
我尝试过处理非客户端元素指标的其他替代方案,但它们都给出了不一致的结果(考虑我的应用从 W2K
运行到 W8
)
谢谢
【问题讨论】:
您可以通过发送 WM_NCHITTEST 消息来探测它。当您获得 HTCLOSE 时,您会找到关闭字形。 既然你说你需要支持Windows 2000,你就不能使用WM_GETTITLEBARINFOEX
这个消息。相反,您必须使用 Active Accessibility 来定位 Close 对象,然后询问其 accLocation
。
WM_GETTITLEBARINFOEX 提供了不可靠的信息,我从未使用过 Active Accessibility,我一直在观察它,似乎那些 MS 复杂的 API;关于在哪里获得一些代码示例做类似事情的任何提示?
【参考方案1】:
关闭按钮没有窗口,也没有单独的HWND
。相反,它与可能的其他元素一起由底层WindowProc
绘制,作为非客户区的一部分。
【讨论】:
你怎么知道的?请不要误会我的意思;我不是在挑战你。但是我想知道您是否在某处发布了非常可能的评论,如果您在调试器上阅读了代码,或者这只是您的猜测。谢谢 这很简单。 Visual Studio 附带Common7\Tools\spyxx.exe
它枚举所有窗口并向您显示,您可以通过EnumWindows
执行相同操作。你会发现它不是一个真正的窗口。以上是关于获取非客户端“关闭”按钮的 hWnd [x] (win32)的主要内容,如果未能解决你的问题,请参考以下文章