如果窗口出现在背景或前面,请使用AutoIt单击控件



我想单击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}")

相关内容

最新更新