如何使脚本专注于应用程序?

How can I make a script focus on an application?

我正在创建一些自动化测试脚本来测试一个软件。我以模块化方式执行此操作,以便我可以更轻松地指定正在使用哪些脚本并更改它,同时拥有所有脚本 pre-compiled

我有一个使用批处理参数启动的脚本,这会打开我编译的脚本,该脚本输入登录详细信息,然后对可能出现的任何对话框按“确定”。这部分按预期工作。

在脚本的末尾,我试图 re-gain 专注于主应用程序 window,将 window 设置为全屏,然后 运行 下一批执行下一个测试等的文件

在此示例中,“$practice”指的是主应用程序的 window 标题,这是我使用 AutoItv3 信息工具导出的。

WinWaitActive($practice)
$hWnd = WinGetHandle($practice)

; FullScreen
WinSetState($practice,"",@SW_RESTORE)
WinSetState($practice,"",@SW_MAXIMIZE)

RunWait(@ComSpec & " /c " & "TestStart.bat")

但是,这并没有像预期的那样重新获得焦点并最大化 window,我认为应用程序启动画面可能会产生干扰。

如果我手动单击进入应用程序的任何部分以聚焦它,那么对话框将设置为全屏,然后我的第二个脚本将 运行。

我应该怎么做才能使脚本的最后一部分按照我的意愿运行?

WinActivate ( "title" [, "text"] ) - Activates (gives focus to) a window.

title - The title/hWnd/class of the window to activate. See Title special definition.

text [optional] The text of the window to activate. Default is an empty string. See Text special definition.

更多信息here

这就是我最终解决问题的方式

WinActivate($practice)
WinWaitActive($practice)
$hWnd = WinGetHandle($practice)

ControlFocus($hWnd, "", "[CLASS:XTPToolBar; INSTANCE:1]")

; FullScreen
WinSetState($practice,"",@SW_RESTORE)
WinSetState($practice,"",@SW_MAXIMIZE)

RunWait(@ComSpec & " /c " & "sequence.bat")

通过添加 WinActivate,然后在调用 WinSetState 之前手动给予控制焦点