关闭匹配指定条件的窗口。
WinClose [, WinTitle, WinText, SecondsToWait, ExcludeTitle, ExcludeText]
WinTitle | 目标窗口的标题或标题中的部分文字(匹配模式由 SetTitleMatchMode 决定)。如果省略其它 3 个窗口参数,默认目标是 上一次匹配窗口 。如果这个参数使用字母 A ,同时省略其它 3 个窗口参数,则以当前激活的窗口作为目标。要用窗口的 class 名进行匹配,使用 ahk_class 精确 class 名(Window Spy 中可以显示 class 名)。要用窗口的 进程标识符(PID)进行匹配,使用 ahk_pid %PID变量% 。要用 窗口组 ,使用 ahk_group 组名 (此时 WinText ,ExcludeTitle ,以及 ExcludeText 三个变量要省略)。要用窗口的 唯一 ID 进行匹配,使用 ahk_id %ID变量% 。要减小检测范围,使用 多重条件 ,例如:My File.txt ahk_class Notepad |
WinText | 如果使用这个参数,则它应该是目标窗口中某个文本元素的子字符串(在 Window Spy 中会显示出窗口中的文本元素)。隐藏文本只有在 DetectHiddenText 设置为 ON 的时候才能检测到。 |
SecondsToWait | 如果省略或留空,命令完全不会等待。如果使用 0 ,会等待 500ms 。否则,它会等待指定的时间(可以包含小数点或者是一个 表达式 )来让窗口彻底关闭。如果窗口在指定的时间内并未关闭,脚本会继续执行,但是该命令 不会 设置 ErrorLevel/错误等级 。所以当需要检测一个窗口是否已被关闭的时候,使用 IfWinExist 或 WinWaitClose 。当该命令处于等待状态的时候,仍然可以通过 快捷键 ,自定义菜单 ,或 定时器 来启动新的 线程 。 |
ExcludeTitle | 标题中包含该参数指定的文字的窗口将被除外。 |
ExcludeText | 文本元素中包含该参数指定的文字的窗口将被除外。 |
这个命令传送一个关闭信息给窗口,结果取决于窗口(可能会询问是否保存数据,或其它)。
如果匹配的窗口中有一个处于激活状态,那么它会被关闭,脚本不会再去关闭其它的匹配窗口。一般情况下,如果匹配的窗口不止一个,处于最前端(最近使用)的窗口将被关闭。
这个命令只对匹配窗口中处于最前端的进行操作,除了在 WinTitle 参数中使用 ahk_group 组名 的时候,这时候会影响窗口组中的所有窗口。
WinClose 通过发送一个 WM_CLOSE 消息给目标窗口来关闭窗口。这个关闭的方法稍微有一点强迫性。另外一个关闭窗口的方法是发送下面那样的消息给窗口。这个方法和 WinClose 有点不同,它更接近按 Alt + F4 或者点击标题栏上关闭按钮的效果:
PostMessage, 0x112, 0xF060,,, WinTitle, WinText ; 0x112 = WM_SYSCOMMAND, 0xF060 = SC_CLOSE
用 WinClose 不能关闭的窗口,可以使用 WinKill 强制关闭。
窗口的标题和窗口中的文字是大小写敏感的。要检测隐藏窗口,必须打开 DetectHiddenWindows 。
WinKill, WinWaitClose, Process, WinActivate, SetTitleMatchMode, DetectHiddenWindows, Last Found Window, IfWinExist, IfWinActive, WinWaitActive, WinWait, GroupActivate
IfWinExist, Untitled - Notepad
WinClose ; 使用上面找到的窗口
else
WinClose, Calculator