-1

我想单击 EXE 文件形式上的按钮。

以下是我尝试过的代码。

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

如果ABCD窗口成为焦点,这将正常工作。如果它不在焦点上,它就不起作用。我该如何克服这个问题?

4

3 回答 3

5

好吧,您应该使用无限循环而不是一遍又一遍地运行相同的编译脚本。JonBecher 是对的,但错过了窗口永远不会激活的情况。所以你的解决方案是:

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

这意味着,您的单击将关闭窗口,并且您希望等待同一窗口在将来某个时候再次出现。否则,您的完整意图Run(...)调用将毫无意义。

ControlClick(...)你不需要让你的窗口处于活动状态甚至可见。

于 2013-07-17T11:31:26.940 回答
2

使用WinActivate您可以使窗口成为焦点。

WinActivate("ABCD")

这会将焦点带到“ABCD”窗口。

WinWaitActive("ABCD")
WinActivate("ABCD")
ControlClick("ABCD","Defer","[CLASS:Button; INSTANCE:2]")
Run("ClickDefer.exe")
于 2013-07-16T13:37:30.340 回答
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}")
于 2015-04-01T13:16:39.260 回答