间谍++如何找出屏幕上某个点的窗口是什么?

时间:2009-08-25 18:22:12

标签: c++ winapi spy++

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

5 个答案:

答案 0 :(得分:12)

有一个WindowFromPoint()功能。

答案 1 :(得分:6)

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

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

答案 2 :(得分: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);

答案 3 :(得分:3)

答案 4 :(得分:0)

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