我想单击EXE文件形式上的按钮。
下面是我尝试过的代码。
WinWaitActive("ABCD")
ControlClick("ABCD","Defer","[CLASS:Button; INSTANCE:2]")
Run("ClickDefer.exe")
- 第一行
WinWaitActive("ABCD")
等待,直到名为ABCD的窗口进入焦点 - 第二行单击按钮,延时
- 第三行运行相同的EXE文件,用于处理相同的场景(如果发生)
如果ABCD窗口成为焦点,此操作将正常工作。如果它不在焦点上,它就不起作用。我该如何克服这个问题?
好吧,你应该使用一个无限循环,而不是一遍又一遍地运行相同的编译脚本。JonBecher是对的,但错过了一个窗口从未激活的案例。所以你的解决方案是:
While True
$win = WinWait("ABCD", "Defer")
ControlClick($win, "", "[CLASS:Button; INSTANCE:2]")
WinWaitClose($win)
Wend
这意味着,您的单击将关闭窗口,并且您希望等待同一窗口在将来某个时候再次出现。否则,您的完整意图Run(...)
调用将没有意义。
使用ControlClick(...)
,您不需要使窗口处于活动状态,甚至不需要使其可见。
使用WinActivate
可以使窗口聚焦。
WinActivate("ABCD")
这将使焦点转到"ABCD"窗口。
WinWaitActive("ABCD")
WinActivate("ABCD")
ControlClick("ABCD","Defer","[CLASS:Button; INSTANCE:2]")
Run("ClickDefer.exe")
如果发送控制键,则无需等待或关注该窗口。它将处理。。。我正在为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}")