我想在 C# 中创建与间谍++相同的函数“查找窗口...”。
我尝试过WINAPI的这个功能:
HWND WINAPI WindowFromPoint(__in POINT Point);
http://msdn.microsoft.com/en-US/library/ms633558.aspx http://msdn.microsoft.com/en-US/library/ms633558.aspx但我没有到达获得所有元素,因为它们被禁用或隐藏。
例如,在程序员模式下使用 Windows 7 计算器,我无法得到“A B C D E F”
对于我的程序,如果它们被禁用,则间谍++可以获取它。
编辑:
我已经尝试过这个但它不起作用:
[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 函数的小例子或者知道我的代码不起作用吗?谢谢你的回答
我尝试创建循环,但是,似乎该句柄位于另一个句柄下方,但不是该句柄的子级,当禁用“ a b c d e f”键时,循环始终发送相同的句柄,并且没有所需的子级。你还有别的想法吗?
WindowFromPoint
返回一个窗口句柄。由于您正在处理禁用/隐藏的窗口,因此您需要使用ChildWindowFromPointEx http://msdn.microsoft.com/en-us/library/windows/desktop/ms632677%28v=vs.85%29.aspx,传入hwndParent
作为您从中获得的任何句柄WindowFromPoint
.
您可能会发现以下文章有帮助:http://blogs.msdn.com/b/oldnewthing/archive/2010/12/30/10110077.aspx http://blogs.msdn.com/b/oldnewthing/archive/2010/12/30/10110077.aspx
关于您添加的代码,ChildWindowFromPointEx
采用客户端坐标,而您拥有的鼠标位置坐标是屏幕坐标。您可以使用以下命令进行转换屏幕到客户端 http://msdn.microsoft.com/en-us/library/dd162952%28v=vs.85%29.aspx.
注意:这是 WinAPI 的处理方式。我不知道 C# 是否提供 API 或提供什么 API。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)