创建函数“;查找窗口";在C#中的spy++

本文关键字:中的 spy++ quot 窗口 函数 查找 创建 | 更新日期: 2023-09-27 18:26:07

我想在C#中创建spy++的相同函数"Find windows…"。我已经尝试了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函数的小例子,或者知道我的代码不起作用?thanx作为您的答案


我试图创建循环,但似乎句柄在另一个句柄下,但不是句柄的子级,当键"a b c d e f"被禁用时,循环总是发送相同的句柄,而没有所需的子级。你还有别的想法吗?

创建函数“;查找窗口";在C#中的spy++

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

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


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

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