创建函数“;查找窗口";在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"被禁用时,循环总是发送相同的句柄,而没有所需的子级。你还有别的想法吗?
WindowFromPoint
返回一个窗口句柄。由于您处理的是禁用/隐藏的窗口,因此您希望使用ChildWindowFromPointEx,将hwndParent
作为从WindowFromPoint
获得的任何句柄进行传递。
您可能会发现以下文章很有帮助:http://blogs.msdn.com/b/oldnewthing/archive/2010/12/30/10110077.aspx
对于您添加的代码,ChildWindowFromPointEx
采用客户端坐标,而您拥有的鼠标位置坐标是屏幕坐标。您可以使用ScreenToClient进行转换。
注意:这是WinAPI做事的方式。我不知道C#是否提供或提供了什么API。