Automation 如果存在';没有控制信息吗?

Automation 如果存在';没有控制信息吗?,automation,autoit,Automation,Autoit,我正在使用AutoIt来自动处理一个专有的Windows EHR应用程序,它看起来像是应用程序的创建者编写的,而没有向应用程序中的任何链接或菜单项添加类、ID或名称。我尝试自动化的应用程序是Greenway Health的PrimeSUITE 我通过使用MouseClick并添加坐标使其工作,但这只在用户不移动窗口的情况下起作用。我想使用更可靠的ControlClick方法发送click命令(我认为在AutoIt中没有第三种发送click命令的方法) 幸运的是,应用程序中内置了一个键盘快捷键,可

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

我通过使用
MouseClick
并添加坐标使其工作,但这只在用户不移动窗口的情况下起作用。我想使用更可靠的
ControlClick
方法发送click命令(我认为在AutoIt中没有第三种发送click命令的方法)

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

WinActivate(": PrimeSUITE -- #CompanyName# -- PRIMESUITETEST")
Send("{F7}")
WinActivate("Report Selection -- Webpage Dialog")
WinWaitActive("Report Selection -- Webpage Dialog")
在这一点上,我必须依赖窗口在屏幕上的位置而不是移动,以便我可以发送
鼠标单击
坐标(其原点从监视器屏幕的左上角开始,而不是当前活动窗口的左上角)

我希望能够以某种方式激活它,如:

ControlClick( ": PrimeSUITE -- #CompanyName# -- PRIMESUITETEST", "Reporting", "[CLASS:Internet Explorer_Server; INSTANCE:1]", "left", 1, 491, 15)
使坐标相对于活动窗口的左上角,而不是监视器屏幕的左上角

对于上下文,这是我在应用程序主窗口中悬停时看到的内容(注意,应用程序是从桌面运行的;它不是在IE中访问的web应用程序),无论我是在空白处还是在链接/菜单项上悬停:

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

但当我将鼠标悬停在某个菜单项上,然后将光标移动到某个子菜单项上时,我会得到以下结果:

以下是Inspect.exe找到的内容的树状图:


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

即使它是一个桌面应用程序,但它正在使用IE对象。您可以使用附加到它,然后使用单击菜单等对象

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

#包括
$hWin=Wingthandle(“PrimeSUITE”)
如果WinExists($hWin),则
$oIE=_IEAttach($hWin,“嵌入式”)
_IELoadWait($oIE)
MsgBox(262144,“,_IEBodyReadHTML($oIE))
其他的
MsgBox(262144,“,”未找到窗口。“)
恩迪夫

连接后,您可以查看HTML以了解如何自动化程序。除了可以使用的IEAttach之外,您还有很多IE功能。例如:_IELinkClickByText、_IELinkClickByIndex、_IEFormElementSetValue和_IEFormElementOptionsSelect

谢谢,我明天会在工作中调查这件事。当应用程序的“运行”位置导致文件路径和IP地址时,我有一些怀疑;它似乎是真正的桌面应用程序和web应用程序之间的桥梁。使用完整的PrimeSUITE窗口名尝试此操作时,我看到一个MsgBox,上面写着“0”,因此我不确定是否能够连接到它。我99%确定您可以连接到它。你在控制台里有什么错误吗?哦,是的。。。我第一次跑的时候就跑了。第1行:
-->IE.au3 T3.0-2函数IEPropertyGet的错误,$\IESTATUS\u无效对象类型
第2行:
-->IE.au3 T3.0-2函数IEAttach的警告,$\IESTATUS\u NoMatch
第3行:
-->IE.au3 T3.0-2函数IELoadWait的错误,$\u IESTATUS\u InvalidDataType
第4行:
-->IE.au3 T3.0-2函数$\u IEBodyReadHTML、$\u IESTATUS\u InvalidDataType出错“
Nope;我得到的窗口找不到MSGBOxUI自动化API扩展可能会在这里有所帮助。你的控件对Inspect.exe可见吗?@VasilyRyabov花了我一段时间才找到Inspect.exe;我以前从未用过。我已经在上面的帖子中添加了一个关于控件的发现的屏幕截图。最好看看控件的层次结构。但我以后有机会可以看一看。是Win8.1还是Win10?顺便说一句,您需要在应用程序清单文件(对于客户端应用程序)中设置中引用的
UIAccess=“true”
。是的,我指的是PrimeSUITE的Inspect.exe的左侧(树状图)。