IfWinActive / IfWinNotActive


检查指定的窗口是否存在和当前是否激活(在最前面)。

IfWinActive [, WinTitle, WinText, ExcludeTitle, ExcludeText]
IfWinNotActive [, WinTitle, WinText, ExcludeTitle, ExcludeText]
UniqueID := WinActive("WinTitle", "WinText", "ExcludeTitle", "ExcludeText")

参数

WinTitle 目标窗口的标题或部分标题(匹配模式由 SetTitleMatchMode 来决定)。如果省略此参数和其他 3 个参数, Last Found Window(最后找到的窗口) 将被使用。要使用一个窗口类,指定 ahk_class 确切的类名 (通过 Window Spy 显示)。要使用一个 process identifier (PID)(进程标识符),指定 ahk_pid %包含PID的变量% 。要使用一个 window group(窗口组),指定 ahk_group GroupName 。要使用一个窗口的 unique ID number(唯一标识符编号),指定 ahk_id %包含ID的变量% 。通过指定 multiple criteria(多个条件)缩小搜索范围。例如:My File.txt ahk_class Notepad
WinText 如果用到,此参数必须是目标窗口的一个单独文本对象的子字串(像内置的 Window Spy 工具显示的一样)。如果 DetectHiddenText 是 ON 的状态,隐藏的文本对象将被探测。
ExcludeTitle 标题含有此参数值的窗口将不被考虑。注意:由于反向兼容 .aut 脚本 ,如果此参数刚好符合一个命令的名称,它会被解释为一个命令。要绕弯解决这种情况,使用 WinActive() 函数 来代替此命令。
ExcludeText 文本含有此参数值的窗口将不被考虑。

注意

如果省略所有参数,Last Found Window 将被使用。

如果这两个命令中任何一个确定激活的窗口是一个合格的匹配,Last Found Window 将更新为激活的窗口。换句话说,如果 IfWinActive 赋值为“真”或者 IfWinNotActive 赋值为“假”,Last Found Window 将被更新。

WinActive() 函数返回激活窗口的 Unique ID (HWND) ,如果窗口匹配指定的条件。假如不匹配,函数返回 0 。由于所有非零数字被视为“真”,在 WinTitle 是激活的时候 if WinActive("WinTitle") 语句为真。

SetWinDelay 不适用于 IfWinExist/IfWinActive 。

窗口标题和文本是区分大小写的。隐藏的窗口将不被探测,除非 DetectHiddenWindows 已被打开。

相关命令

IfWinExist, SetTitleMatchMode, DetectHiddenWindows, Last Found Window, WinActivate, WinWaitActive, WinWait, WinWaitClose, #IfWinActive/Exist

示例

IfWinActive, 无标题 - 记事本
{
    WinMaximize  ; 最大化由上面的 IfWinActive 找到的记事本窗口。
    Send, Some text.{Enter}
    return
}

if WinActive("ahk_class Notepad") or WinActive("ahk_class" . ClassName)  ; "ahk_class" 后面不需要带空格。
    WinClose  ; 使用 last found window
翻译:天堂之门 menk33@163.com 2008年8月12日