8

我很好奇 spy++ Finder Tool 如何找到鼠标所在窗口的窗口句柄。是否有任何 WIN32 函数用于获取显示器上占据某个像素的最顶层窗口的句柄?

4

5 回答 5

13

有一个WindowFromPoint()函数。

于 2009-08-25T18:24:53.507 回答
7

这是一个关于如何实现 spy++ finder 的非常完整的示例。

http://www.codeproject.com/KB/dialog/windowfinder.aspx

于 2009-08-25T18:38:47.940 回答
4

这里有一些关于 Spy++ 内部的很好的信息:http: //blogs.msdn.com/b/vcblog/archive/2007/01/16/spy-internals.aspx。支持 DeusAduro 的回复,即 Spy++ 安装全局钩子(实际上是 3 个钩子,其中之一是 WH_CALLWNDPROC)。

您还可以在此处找到有关 Spy++ 克隆的更多信息:http: //www.codeproject.com/KB/dialog/windowfinder.aspx

此外,这里的 SDK 中应该有一个非常相似的应用程序的下载:http: //msdn.microsoft.com/en-us/library/Aa231779但它似乎已损坏(没有下载 - 就像 msdn 上的很多链接一样:( )。

根据您想要获得的内容(如果它不是 hwnd),您还可以获得一个 AutomationElement:

System.Windows.Point pt = new System.Windows.Point(System.Windows.Forms.Cursor.Position.X, System.Windows.Forms.Cursor.Position.Y);
AutomationElement ae = AutomationElement.FromPoint(pt);
于 2011-05-18T07:43:24.210 回答
3

WindowFromPointChildWindowFromPointAPI 函数。

于 2009-08-25T18:25:56.580 回答
0

不要引用我的话,但我相信 spy++ 会安装一个 WH_CALLWNDPROC 钩子。然后在到达目标窗口之前发送所有 WM_MOUSEMOVE 消息。因此,只要将鼠标悬停在窗口上,spy++ 就会收到一条消息,告诉它哪个窗口。

于 2009-08-25T18:25:34.957 回答