如果没有控制信息,我可以控制点击链接或对象吗?

时间:2015-12-08 17:24:28

标签: automation autoit

我正在使用AutoIt自动处理专有的Windows EHR应用程序,看起来应用程序的创建者编写它而不向应用程序内的任何链接或菜单项添加类,ID或名称。我正在尝试自动化的应用程序是Greenway Health的PrimeSUITE。

我已经通过使用MouseClick并添加坐标来实现它,但只有在用户不移动窗口时才能工作。我想使用更可靠的ControlClick方法发送点击命令(我认为第三种方法是在AutoIt中发送点击命令)。

幸运的是,应用程序内置了一个键盘快捷键,用于在新窗口中打开我想要的菜单项。这就是我目前要访问菜单项的方式:

WinActivate(": PrimeSUITE -- #CompanyName# -- PRIMESUITETEST")
Send("{F7}")
WinActivate("Report Selection -- Webpage Dialog")
WinWaitActive("Report Selection -- Webpage Dialog")

此时我必须依靠窗口在屏幕上的位置不移动,以便我可以发送MouseClick坐标(其原点从我的显示器屏幕的左上角开始,而不是当前活动窗口的左上角。)

喜欢能够以某种方式激活它:

ControlClick( ": PrimeSUITE -- #CompanyName# -- PRIMESUITETEST", "Reporting", "[CLASS:Internet Explorer_Server; INSTANCE:1]", "left", 1, 491, 15)

这样坐标就相对于活动窗口的左上角而不是显示器屏幕的左上角。

对于上下文,这是我在应用程序主窗口中徘徊时看到的内容(注意,应用程序是从桌面运行的;它不是在IE中访问的Web应用程序),无论哪个部分,无论我是否在空白区域或悬停链接/菜单项:

但是只要我将鼠标悬停在菜单项上,然后将光标移动到子菜单项,我就明白了:

以下是Inspect.exe找到的树视图:

我是否会通过屏幕坐标使用MouseClick方法,或者是否有办法使用ControlClick或其他方式以编程方式发送点击?

1 个答案:

答案 0 :(得分:1)

即使它是桌面应用程序,它也使用IE对象。您可以使用_IEAttach附加到该_IEAction,然后使用{{3}}点击菜单上的对象。

以下是如何附加到PrimeSUITE的示例(您可能需要更改窗口标题)。

#include <IE.au3>

$hWin = WinGetHandle("PrimeSUITE")

If WinExists($hWin) Then

    $oIE = _IEAttach($hWin, "embedded")

    _IELoadWait($oIE)

    MsgBox(262144, "", _IEBodyReadHTML($oIE))
Else
    MsgBox(262144, "", "Window not found.")
EndIf

连接后,您可以查看HTML以了解如何自动执行该程序。除了_IEAttach之外,你还可以使用很多IE函数。例如:_IELinkClickByText,_IELinkClickByIndex,_IEFormElementSetValue和_IEFormElementOptionSelect。