【问题标题】:WindowFromPoint returns handle for controls, but I only want the main windowWindowFromPoint 返回控件的句柄,但我只想要主窗口
【发布时间】:2010-12-29 21:19:20
【问题描述】:

我正在编写一个窗口间谍类型的东西来为我拥有的应用程序添加一个功能。我已经让所有代码工作了,但有时 WindowFromPoint 返回控件的句柄而不是包含窗口。出于我的目的,我只关心主包含窗口。有没有办法让我排除控件?或者可能检测到结果是一个控件并向上递归直到我到达包含窗口?

【问题讨论】:

    标签: winapi


    【解决方案1】:

    您可以测试 WS_CHILD 标志(GetWindowLongPtr 和 'GWL_STYLE'),如果存在,则调用 GetAncestor 和 'GA_ROOT' 作为 'gaFlags'。

    【讨论】:

    • 我在 C# 中执行此操作,pinvoke 有 GetWindowLongPtr 返回一个 IntPtr。由于WS_CHILD 很长,如何将它们转换为相同的格式以检查标志?
    • 窗口样式只是一个 32 位数字(GWL_* 是 32 位,GWLP_* 是指针大小)
    • @Anders 窗口样式被列为 longs(64 位)。 msdn.microsoft.com/en-us/library/ms632600%28v=vs.85%29.aspxToInt64()WS_CHILD 进行了标志检查。
    • @unholysampler:Windows 是 LLP64,所以 long 实际上是 32 位,但是 GetWindowLongPtr 返回一个 LONG_PTR 并且它是指针大小的,但是,Windows 样式位都在 32 位范围内(旧的 GetWindowLong 函数文档排序of 确认这一点“如果您正在检索指针或句柄,则此函数已被 GetWindowLongPtr 函数取代”)
    猜你喜欢
    • 2017-06-19
    • 2013-11-11
    • 2014-08-02
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多