在另一个应用程序中单击按钮

时间:2018-10-26 12:03:51

标签: c# api

我被困住了,我也不知道是什么问题。我看到了另一个类似的话题,但没有帮助我。

这是我的代码:

  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。

知道为什么吗?是否可以让程序保护单击或其他?

1 个答案:

答案 0 :(得分:1)

请检查UI Automation API。

是基于COM的,但是有.net包装器。安装Windows SDK即可访问API和托管包装。

要获取按钮,请:

  • 通过手柄查找-请参见elementfromhandle
  • 接下来调用InvokePattern之类的东西来获得automationElement.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern
  • 最后一个-调用此模式:invokePattern.Invoke();

也请检查Microsoft Example,可能会有所帮助。