我想点击EXE文件表单上的按钮。
以下是我尝试过的代码。
WinWaitActive("ABCD")
ControlClick("ABCD","Defer","[CLASS:Button; INSTANCE:2]")
Run("ClickDefer.exe")
WinWaitActive("ABCD")
等待名为 ABCD 的窗口成为焦点。如果 ABCD 窗口成为焦点,这将正常工作。如果不是焦点则不起作用。我该如何克服这个问题?
答案 0 :(得分:5)
好吧,你应该使用无限循环而不是一遍又一遍地运行相同的编译脚本。并且JonBecher是对的,但是错过了案例,窗口永远不会变得活跃。所以你的解决方案是:
While True
$win = WinWait("ABCD", "Defer")
ControlClick($win, "", "[CLASS:Button; INSTANCE:2]")
WinWaitClose($win)
Wend
这意味着,您的点击将关闭窗口,并且您希望等待同一窗口在将来再次显示。否则你的完整意图Run(...)
- 电话没有意义。
使用ControlClick(...)
,您无需让窗口处于活动状态,甚至不可见。
答案 1 :(得分:2)
使用WinActivate
可以让窗口成为焦点。
WinActivate("ABCD")
这将把焦点带到“ABCD”窗口。
WinWaitActive("ABCD")
WinActivate("ABCD")
ControlClick("ABCD","Defer","[CLASS:Button; INSTANCE:2]")
Run("ClickDefer.exe")
答案 2 :(得分:0)
如果您发送控制键,则无需等待或关注该窗口。它会处理......我正在为Skype sso编写这段代码,无论窗口在哪里......如果窗口最小化,它就可以工作。
#include <WinAPI.au3>
$pId = Run("C:/Program Files (x86)/Skype/Phone/Skype.exe")
Local $hWnd = WinWait("[CLASS:TLoginForm]", "", 10)
sleep(8000)
ControlSend($hWnd, "", "[CLASS:Internet Explorer_Server]", "Passw0rd")
sleep(1000)
ControlSend($hWnd, "", "[CLASS:Internet Explorer_Server]", "{TAB}")
sleep(1000)
ControlSend($hWnd, "", "[CLASS:Internet Explorer_Server]", "{Enter}")