如果没有控制信息,我可以控制单击 link 或对象吗?

Can I ControlClick a link or object if there's no Control information?

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

我已经通过使用 MouseClick 和添加坐标使其工作,但只有在用户不移动 Window 时才有效。我想使用更可靠的 ControlClick 方法来发送点击命令(我认为 AutoIt 中没有第三种发送点击命令的方法)。

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

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

这时候就得靠window在屏幕上的位置不动了,才能发送MouseClick坐标(原点从左上角开始我的显示器屏幕,而不是当前活动 Window 的左上角)。

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

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

所以坐标是相对于活动window的左上角而不是监视器屏幕的左上角。

对于上下文,这是我将鼠标悬停在应用程序的主 window 中时看到的内容(请注意,该应用程序是 运行 来自桌面;它不是在 IE 中访问的网络应用程序) ,无论哪一部分,无论我是在空白 space 还是悬停在 link/menu 项:

但是当我将鼠标悬停在菜单项上然后将光标移动到子菜单项时,我得到了这个:

这是 Inspect.exe 发现的树视图:

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

尽管它是一个桌面应用程序,但它使用的是 IE objects。您可以使用 _IEAttach and then use _IEAction 附加到它,以便像您的菜单一样单击 objects。

这是一个如何附加到 PrimeSUITE 的示例(您可能需要更改 window 标题)。

#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。