如果窗口存在于背景中或前面,则使用AutoIt单击控件

Rom*_*esh -1 automation autoit

我想单击EXE文件表单上的按钮.

以下是我尝试过的代码.

WinWaitActive("ABCD")
ControlClick("ABCD","Defer","[CLASS:Button; INSTANCE:2]")
Run("ClickDefer.exe")
Run Code Online (Sandbox Code Playgroud)
  • 第一行,WinWaitActive("ABCD")等到名为ABCD的窗口成为焦点.
  • 第二行单击按钮,Defer
  • 第三行运行相同的EXE文件,以便在发生时处理相同的情况.

如果ABCD窗口成为焦点,这可以正常工作.如果不是焦点则不起作用.我该如何克服这个问题?

Sam*_*oth 5

好吧,你应该使用无限循环而不是一遍又一遍地运行相同的编译脚本.并且JonBecher是对的,但是错过了案例,窗口永远不会变得活跃.所以你的解决方案是:

While True
    $win = WinWait("ABCD", "Defer")
    ControlClick($win, "", "[CLASS:Button; INSTANCE:2]")
    WinWaitClose($win)
Wend
Run Code Online (Sandbox Code Playgroud)

这意味着,您的点击将关闭窗口,并且您希望等待同一窗口在将来再次显示.否则你的完整意图 - Run(...)调用是没有意义的.

随着ControlClick(...)你不需要有你的激活窗口,甚至可见.