Automation 如果背景或前面有窗口,请使用AutoIt单击控件

Automation 如果背景或前面有窗口,请使用AutoIt单击控件,automation,autoit,Automation,Autoit,我想单击EXE文件表单上的按钮 下面是我尝试过的代码 WinWaitActive("ABCD") ControlClick("ABCD","Defer","[CLASS:Button; INSTANCE:2]") Run("ClickDefer.exe") 第一行,WinWaitActive(“ABCD”)等待一个名为ABCD的窗口进入焦点 第二行单击按钮,Defer 第三行运行相同的EXE文件来处理相同的场景(如果发生) 如果ABCD窗口对焦,则此功能正常工作。如果没有聚焦,它就不起作用

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

下面是我尝试过的代码

WinWaitActive("ABCD")
ControlClick("ABCD","Defer","[CLASS:Button; INSTANCE:2]")
Run("ClickDefer.exe")
  • 第一行,
    WinWaitActive(“ABCD”)
    等待一个名为ABCD的窗口进入焦点
  • 第二行单击按钮,Defer
  • 第三行运行相同的EXE文件来处理相同的场景(如果发生)

如果ABCD窗口对焦,则此功能正常工作。如果没有聚焦,它就不起作用。如何克服此问题?

使用
WinActivate
可以使窗口聚焦

WinActivate(“ABCD”)

这将把焦点移到“ABCD”窗口


那么,您应该使用无限循环,而不是反复运行同一个编译脚本。JonBecher是对的,但是错过了窗口永远不会激活的情况。因此,您的解决方案是:

While True
    $win = WinWait("ABCD", "Defer")
    ControlClick($win, "", "[CLASS:Button; INSTANCE:2]")
    WinWaitClose($win)
Wend
这意味着您的单击将关闭窗口,并且您希望等待同一窗口在将来的某个时候再次出现。否则,您完整的意图
运行(…)
-调用就没有意义了


使用
ControlClick(…)
您不需要让窗口处于活动状态甚至可见状态。

如果发送控制键,则无需等待或关注该窗口。它会处理。。。我正在为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}")
#包括
$pId=Run(“C:/ProgramFiles(x86)/Skype/Phone/Skype.exe”)
本地$hWnd=WinWait(“[CLASS:tloginfo]”,“”,10)
睡眠(8000)
ControlSend($hWnd,“,[类别:Internet Explorer\u服务器],“Passw0rd”)
睡眠(1000)
ControlSend($hWnd,“,”[CLASS:InternetExplorer_Server],“{TAB}”)
睡眠(1000)
ControlSend($hWnd,“,”[CLASS:InternetExplorer_Server],“{Enter}”)
#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}")