WinActivate

激活指定的窗口.

WinActivate WinTitle, WinText, ExcludeTitle, ExcludeText

参数

WinTitle, WinText, ExcludeTitle, ExcludeText

类型: 字符串, 整数对象

如果这些都未设置或省略, 将使用上次找到的窗口. 否则, 为 WinTitle 指定窗口标题或其他条件, 来标识目标窗口, 和/或为 WinText 指定目标窗口的单个文本元素的子字符串(由包含的 Window Spy 实用程序显示). 如果 DetectHiddenText 已经打开, 则检测隐藏文本元素. 标题或文本包含 ExcludeTitleExcludeText 的窗口将不被考虑.

错误处理

如果找不到窗口, 则抛出 TargetError.

备注

当非活动窗口变为活动状态时, 操作系统也会使其处于最前面(将其带到堆栈的顶部). 如果窗口已经处于活动状态, 则不会发生这种情况.

如果窗口处于最小化和非活动状态, 那么会对其还原后再进行激活. 如果 WinTitle 是字母 "A", 并且省略了其他参数, 则活动窗口将会还原. 窗口即使已经是活动窗口, 也会被还原.

在 60 ms 的时间中, 会对目标窗口进行六次激活的尝试. 如果六次尝试都失败了, WinActivate 会自动发送 {Alt 2} 作为操作系统可能实施的限制的变通方法, 然后进行第七次尝试. 因此, 通常不需要在此函数后使用 WinWaitActiveif not WinActive(...).

WinActivate 第一次尝试失败后, 会自动发送 {Alt up}. 测试表明, 这可能会提高所有后续尝试的可靠性, 减少第一次尝试失败并导致任务栏按钮闪烁的情况. 在每个脚本的生命周期中, 为此目的发送的 {Alt up} 不超过一个. 如果这个或任何其他(AutoHotkey v1.1.27+) 脚本安装了键盘钩子, {Alt up} 就会被阻挡在活动窗口之外, 从而将已经很小的副作用风险降到最低.

通常, 如果有多个窗口匹配, 则会激活最上面的匹配窗口(通常是最近使用的窗口). 如果窗口已经激活, 则它将保持激活状态, 而不是激活它下面的任何其他匹配窗口. 但是, 如果使用 WinMoveBottom, 将活动窗口移动到堆栈底部, 则可能会激活其他窗口, 即使活动窗口是匹配的.

WinActivateBottom 激活最底层的匹配窗口(通常是最近最早使用的那个).

GroupActivate 激活与窗口组指定的条件匹配的下一个窗口.

如果要激活的窗口处于隐藏状态并且 DetectHiddenWindows 被设置为 OFF 时, 该窗口将永远不会视为一个匹配项. 相反, 只要有一个匹配窗口是可见的, 它就会被激活.

在激活另一个窗口后立即激活一个窗口时, 任务栏按钮可能在某些系统上可能会闪烁(取决于操作系统和设置). 为防止这种情况, 请使用 #WinActivateForce.

窗口标题和文本是区分大小写的. 除非 DetectHiddenWindows 被打开, 否则不会检测隐藏窗口.

已知问题: 如果脚本运行在正在被远程桌面访问的计算机或服务器上, 当远程桌面客户端最小化时, WinActivate 可能会挂起. 一种解决办法是使用不需要激活窗口的内置函数, 如 ControlSendControlClick. 另一个可能的解决方法是在本地/客户端计算机的注册表上做如下设置:

; 将 HKCU 改成 HKLM, 以对该系统上的所有用户生效.
RegWrite "REG_DWORD", "HKCU\Software\Microsoft\Terminal Server Client"
    , "RemoteDesktop_SuppressWhenMinimized", 2

WinActivateBottom, #WinActivateForce, SetTitleMatchMode, DetectHiddenWindows, 上次找到的窗口, WinExist, WinActive, WinWaitActive, WinWait, WinWaitClose, WinClose, GroupActivate, 窗口函数

示例

如果记事本确实存在, 激活它, 否则激活计算器.

if WinExist("Untitled - Notepad")
    WinActivate ; 使用由 WinExist 找到的窗口
else
    WinActivate "Calculator"
unixetc