如果没有控制信息,我可以控制单击 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。
我正在使用 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。