IfWinExist / IfWinNotExist / WinExist

优质
小牛编辑
130浏览
2023-12-01

检查是否存在匹配的窗口。WinExist() 返回首个匹配窗口的唯一 ID(HWND)

IfWinExist [, WinTitle, WinText,  ExcludeTitle, ExcludeText]
IfWinNotExist [, WinTitle, WinText, ExcludeTitle, ExcludeText]
UniqueID := WinExist("WinTitle", "WinText", "ExcludeTitle", "ExcludeText")

参数

UniqueID

首个匹配指定条件窗口的唯一 ID(HWND)(作为十六进制整型)。

WinTitle

窗口标题或识别目标窗口的其他条件。请参阅 WinTitle

WinText

如果使用此参数, 那么它必须是目标窗口中单个文本元素的子字符串 (和内置的 Window Spy 工具显示的一样). 当 DetectHiddenText 的设置为 ON 时, 那么会检测到隐藏文本元素.

ExcludeTitle

标题中含有此参数值的窗口将被排除. 注:由于向后兼容性,所以如果此参数准确匹配某个命令名,那么 IfWinExistIfWinNotExist 会将其作为命令解释。要变通解决此问题,请使用 WinExist() 函数代替。

ExcludeText

文本中含有此参数值的窗口将被排除.

备注

如果省略所有参数,那么将检查上次找到的窗口看它是否仍然存在(如果是 IfWinNotExist 则检查其是否不存在)。

如果这些命令的其中一个确定了某个符合的窗口存在, 那么 上次找到的窗口 将更新为此窗口. 换句话说,如果 IfWinExist 匹配结果为真或 IfWinNotExist 匹配结果为假,那么将更新上次找到的窗口

WinExist() 返回首个匹配窗口的 唯一 ID (HWND)(没有找到匹配时则为 0)。由于所有非零值都被视为“true”,所以每当 WinTitle 存在时 if WinExist("WinTitle") 语句为真。

要获取控件的 HWND (用于 Post/SendMessageDllCall 中), 请使用 ControlGet HwndMouseGetPos.

SetWinDelay 不适用于 IfWinExistIfWinActive

窗口标题和文本是区分大小写的. 只有在打开 DetectHiddenWindows 设置时,才能检测到隐藏窗口。

相关

IfWinActive, SetTitleMatchMode, DetectHiddenWindows, 上次找到的窗口, Process, WinActivate, WinWaitActive, WinWait, WinWaitClose, #IfWinActive/Exist

示例

; 例 1
IfWinExist, Untitled - Notepad
{
    WinActivate  ; 自动使用上面找到的窗口.
    WinMaximize  ; 同上
    Send, Some text.{Enter}
    return
}

; 例 2
IfWinNotExist, Calculator
    return
else
{
    WinActivate  ; 前面的“IfWinNotExist”也设置了上次找到的窗口。
    WinMove, 40, 40  ; 把它移动到新位置。
    return
}

; 例 3
if WinExist("ahk_class Notepad") or WinExist("ahk_class" . ClassName)
    WinActivate  ; 使用最近找到的窗口

MsgBox % "The active window's ID is " . WinExist("A")

; 例 4: 等同于 IfWinNotExist, Calculator
If !WinExist("Calculator")
    return