我被困住了,我也不知道是什么问题。我看到了另一个类似的话题,但没有帮助我。
这是我的代码:
foreach (IntPtr se in allchwin)
{
IntPtr a = SendMessage(se, WM_GETTEXTLENGTH, 0, null);
StringBuilder outText = new StringBuilder(a.ToInt32() + 1);
SendMessage(se, WM_GETTEXT, outText.Capacity, outText);
if (outText.ToString() == "Login")
{
SendMessage(se, WM_LBUTTONDOWN, 0, null);
SendMessage(se, WM_LBUTTONUP, 0, null);
SendMessage(se, BM_CLICK, 0, null);
}
}
List(IntPtr)-allchwin:包含程序中用于搜索“登录”按钮的整个子窗口句柄。
我发现“登录”按钮的窗口句柄是这个正确的值,我检查了Spy ++,但是发送命令后什么也没有发生。 每个SendMessage命令的返回值均为0。程序窗口位于前台,其中是“登录”按钮。该按钮有一个父窗口,它是程序的主窗口。
我尝试使用FindWindow和FindWindowEx,但结果相似,返回值为0。
知道为什么吗?是否可以让程序保护单击或其他?
答案 0 :(得分:1)
请检查UI Automation API。
是基于COM的,但是有.net包装器。安装Windows SDK即可访问API和托管包装。
要获取按钮,请:
InvokePattern
之类的东西来获得automationElement.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern
invokePattern.Invoke();
也请检查Microsoft Example,可能会有所帮助。