我很好奇间谍++ Finder工具如何找到鼠标所在窗口的窗口句柄。 是否有任何WIN32函数用于获取占据显示器上某个像素的最顶层窗口的句柄?
答案 0 :(得分:12)
有一个WindowFromPoint()功能。
答案 1 :(得分:6)
这是一个如何实现spy ++ finder的完整示例。
答案 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消息。因此,只要将鼠标移到窗口上,间谍++就会收到一条消息,告诉它哪个窗口。