WinClose

关闭指定的窗口.

WinClose , WinTitle, WinText, SecondsToWait, ExcludeTitle, ExcludeText

参数

WinTitle, WinText, ExcludeTitle, ExcludeText

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

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

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

SecondsToWait

如果省略或为空, 此命令会完全不等待. 如果为 0, 则它会等待 500 ms. 否则, 它会等待指定的秒数(可以为小数或表达式) 来让窗口关闭. 如果窗口在此期间没有关闭, 那么脚本会继续执行.

备注

此命令发送关闭消息到窗口. 结果取决于窗口(它可能会询问是否保存数据等).

如果匹配窗口是活动的, 那么会优先关闭此窗口而不是其他匹配窗口. 一般而言, 如果有多个匹配窗口, 那么会关闭最上面的(最近使用的) 窗口.

此命令仅对一个窗口进行操作, 除非 WinTitleahk_group GroupName(没有其他条件指定), 在这种情况下, 组中的所有窗口都受到影响.

此命令 不会 设置 ErrorLevel, 所以如果您需要确定窗口是否关闭时请使用 WinExist(), IfWinExistWinWaitClose.

当此命令处于等待状态时, 可以通过热键, 自定义菜单项计时器启动新的线程.

WinClose 发送 WM_CLOSE 消息到目标窗口, 这种关闭方法有些强制性. 关闭窗口的另一种方法是发送下面的消息. 它可能会产生与此命令不同的行为, 因为它类似于按下 Alt+F4 或点击窗口标题栏的关闭按钮的效果:

PostMessage, 0x0112, 0xF060,,, WinTitle, WinText  ; 0x0112 = WM_SYSCOMMAND, 0xF060 = SC_CLOSE

如果使用 WinClose 无法关闭窗口, 那么您可以使用 WinKill 来强制关闭.

WinKill, WinWaitClose, Process, WinActivate, SetTitleMatchMode, DetectHiddenWindows, 上次找到的窗口, WinExist(), WinActive(), WinWaitActive, WinWait, GroupActivate

示例

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

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