WinActivate

激活指定的窗口.

WinActivate , WinTitle, WinText, ExcludeTitle, ExcludeText

参数

WinTitle, WinText, ExcludeTitle, ExcludeText

如果这些都是空白或省略, 将使用上次找到的窗口. 否则, 为 WinTitle 指定窗口标题或其他条件, 来标识目标窗口, 和/或为 WinText 指定目标窗口的单个文本元素的子字符串(由包含的 Window Spy 实用程序显示).

ExcludeTitleExcludeText 可用于根据标题或文本排除一个或多个窗口. 它们的规范类似于 WinTitleWinText, 除了 ExcludeTitle 不识别除窗口标题之外的任何条件.

窗口标题和文本是区分大小写的. 默认情况下, 不检测隐藏窗口, 而检测隐藏文本元素, 除非使用 DetectHiddenWindowsDetectHiddenText 进行更改. 默认情况下, 窗口标题必须以指定的 WinTitleExcludeTitle 开头才能匹配, 除非使用 SetTitleMatchMode 进行更改.

备注

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

如果窗口最小化且处于非活动状态, 那么在激活之前自动还原. 在 [v1.1.20+]: 如果 WinTitle 是字母 "A", 并且省略了其他参数, 则活动窗口(最小化的) 将会还原. [v1.1.28.02+]: 已经是活动状态的窗口(最小化的), 也会被还原.

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

一般情况下, 如果有多个窗口匹配, 则最高匹配窗口(通常是最近使用的窗口) 将被激活. 如果该窗口已处于活动状态, 则它将保持活动状态, 而不是激活其下的任何其他匹配窗口. 但是, 如果使用 WinSet Bottom 将活动窗口移动到堆栈底部, 则可能会激活其他窗口, 即使活动窗口是匹配的.

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

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

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

在激活一个窗口后立即激活其他的窗口, 在一些系统上任务栏按钮可能会闪烁(取决于操作系统和设置). 要避免此问题, 请使用 #WinActivateForce.

已知问题: 如果脚本运行在正在被远程桌面访问的计算机或服务器上, 当远程桌面客户端最小化时, 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, WinSet

示例

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

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