【问题标题】:create the function "find window..." of spy++ in C#在 C# 中创建 spy++ 的函数“查找窗口...”
【发布时间】:2012-03-02 00:31:32
【问题描述】:

我想在 C# 中创建与 spy++ 相同的函数“查找窗口...”。 我已经尝试过使用 WINAPI 的这个功能:

HWND WINAPI WindowFromPoint(__in  POINT Point);

http://msdn.microsoft.com/en-US/library/ms633558.aspx 但我并没有得到所有元素,因为它们被禁用或隐藏。

例如,在程序员模式下使用 window 7 计算器,我无法获得“A B C D E F” 使用我的程序,如果它们被禁用,那么 spy++ 可以得到它。

编辑: 我已经尝试过了,但它不起作用:

[DllImport("user32.dll")]
public static extern ulong GetClassLongPtr(IntPtr hWnd, int nIndex);

[DllImport("user32.dll")]
public static extern IntPtr ChildWindowFromPointEx(IntPtr hWndParent, Win32Point pt, uint uFlags);

IntPtr hWnd = WindowFromPoint(myPoint);
hWnd= ChildWindowFromPointEx(hWnd , myPoint, 0x0000);

myPoint 是我鼠标的位置。

我不熟悉 WINAPI,我想你的解释是对我缺乏了解。有可能有一个 ChildWindowFromPointEx 函数的小例子,或者知道我的代码不起作用吗?谢谢你的回答


我尝试创建循环,但是,句柄似乎在另一个句柄下但不是句柄的子句柄,当键“a b c d e f”被禁用时,循环总是发送相同的句柄并且没有期望的子句。你有别的想法吗?

【问题讨论】:

  • 为了它的价值,你可能应该跳过不可见的窗口(只是不是禁用的窗口)。如果您打开 Spy++,您会看到桌面上散布着几十个不可见的窗口——主要是工具提示、菜单和对话框,它们已被关闭但准备好在适当的时候再次显示。您通常希望忽略这些,否则它们会干扰,您最终可能会得到一个用户根本看不到任何对应的 HWND!

标签: c# winapi spy++ findwindow


【解决方案1】:

WindowFromPoint 返回一个窗口句柄。由于您正在处理禁用/隐藏的窗口,因此您需要使用ChildWindowFromPointEx,将hwndParent 作为您从WindowFromPoint 获得的任何句柄传递。

您可能会发现以下文章很有帮助: http://blogs.msdn.com/b/oldnewthing/archive/2010/12/30/10110077.aspx


关于您添加的代码,ChildWindowFromPointEx 采用客户端坐标,而您拥有的鼠标位置坐标是屏幕坐标。您可以使用ScreenToClient 进行转换。

注意:这是 WinAPI 做事的方式。我不知道 C# 是否提供或提供什么 API。

【讨论】:

  • 谢谢,我已经尝试了你的功能,但它仍然不适合我,如果它可以帮助你看到我的问题,我已经编辑了我的问题以添加信息。谢谢
  • 小说明:WindowFromPoint 实际上会返回子窗口;根据 MSDN 和 Raymond Chen 的文章,它将返回“最嵌套”的窗口。但是,您仍然坚持其忽略禁用窗口的政策;这就是这里的问题,而不是顶级与子窗口的问题 - 所以最好是通过在合适的循环中使用 ChildWindowFromPointEx 来滚动您自己的版本。
  • 是的 BrendanMcK 和 Mike Kwan,你有理由将 ChildWindowFromPointEx 和 ScreenToClient 结合起来,我终于到达获得我的 Window 的孩子,但我需要访问孙辈和其他人,我会当我找到这个时发布解决方案
  • 我已经尝试创建循环但是,似乎句柄在另一个句柄下但不是句柄的子句柄,循环发送总是相同的句柄并且没有想要的子句柄“ a b c d e f" 被禁用。你有别的想法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
  • 1970-01-01
  • 2020-06-17
  • 2011-09-03
  • 1970-01-01
相关资源
最近更新 更多