# “最近找到”的窗口

这是被 IfWin[Not]Exist, IfWin[Not]Active, WinWait[Not]Active 或 WinWait 命令最近找到的窗口。由于不需要在各种窗口命令里再重复目标窗口的 WinTitle 和 WinText 参数，所以它可以使脚本更易于创建和维护。此外，因为在首次找到目标窗口后不需要再将其搜寻一遍，所以脚本执行得更好。

所有窗口命令都可以使用“最近找到”的窗口，除了 WinWait, WinActivateBottom 和 GroupAdd。要使用它的话，只需省略掉全部的四个窗口参数(WinTitle, WinText, ExcludeTitle 和 ExcludeText)。

每个线程都保留了它自有的“最近找到”窗口的值，就是说如果当前线程被另一个线程打断，那么在原来的线程恢复时，它仍将保持它原本的“最近找到”窗口的值，而不是那个中断它的线程的值。

如果最近找到的窗口是一个隐藏的 Gui 窗口，那么即使在 DetectHiddenWindows 处于 Off 状态时，它也能被使用。这常与"Gui +LastFound"一起使用。

示例

    Run Notepad
    WinWait 无标题 - 记事本
    WinActivate  ;使用最近找到的窗口。

    IfWinExist, 无标题 - 记事本
    {
        WinActivate  ;自动地使用上面找到的窗口。
        WinMaximize  ;同上
        Send, Some text.{Enter}
        return
    }

    IfWinNotExist, 计算器
        return
    else
    {
        WinActivate  ;上面的 "IfWinNotExist" 也为我们设置了“最近找到”的窗口。
        WinMove, 40, 40  ;将它移动到一个新的位置。
        return
    }

## WinTitle 参数的其他用法

如果有多种窗口符合一个窗口命令比如 WinMove 的 WinTitle/Text 条件，那么在窗口堆层次中位于其它窗口上面的那个窗口将被使用。例如，如果激活的/最前面的窗口匹配条件，就会用它，即使它下面还有其它匹配的窗口。

激活的窗口 (A): 几乎所有的窗口命令都能被告知对激活的窗口进行操作，只要指定它们的 WinTitle 参数为字母 A 并且省略掉 WinText, ExcludeTitle 和 ExcludeText。在下例中，Win+上箭头 变成一个最大化当前激活窗口的热键: #Up::WinMaximize A

窗口类 (ahk_class): 通过 Window Spy 显示的或者由 WinGetClass 获得的类名都能使所有的窗口命令对一个窗口类进行操作。在下例中，一个分割视图的资源管理器窗口（译注：即左侧为文件夹树）将被激活: WinActivate ahk_class ExploreWClass

唯一 ID/HWND (ahk_id): 通过唯一 ID 编号，所有的窗口命令都能对特定的窗口或者控件进行操作。例如：WinActivate ahk_id %VarContainingID%。一个窗口的 ID 一般通过 WinExist() 或者 WinGet 来取得。一个控件的 ID 一般通过 ControlGet Hwnd, MouseGetPos 或 DllCall 来取得。而且，即使控件是隐藏的，ahk_id 也将对它们进行操作；就是说，DetectHiddenWindows 的设置无关紧要。

进程 ID (ahk_pid): 所有的窗口命令都能对属于一个进程标识符(PID)的窗口进行操作。例如，WinClose ahk_pid %VarContainingPID% 会关闭那个进程的最上层窗口。PID 能通过 WinGet 或 Run 或 Process 来获得。

窗口组 (ahk_group): 通过给 WinTitle 参数指定 ahk_group MyGroupName，所有的窗口命令都能对属于一个窗口组的窗口进行操作。WinMinimize, WinMaximize, WinRestore, WinHide, WinShow, WinClose 和 WinKill 命令会对组内所有的窗口起作用。相比之下，其它窗口命令例如 WinActivate 和 IfWinExist 将只对组内最上层的窗口进行操作。

多重条件: 和上面段落中的 ahk_group (其扩大了搜索)相比，只要在 WinTitle 参数中指定多个条件就能缩小搜索范围。在下例中，脚本等待标题包含 My File.txt 以及类是 Notepad 的窗口出现:

    WinWait My File.txt ahk_class Notepad
    WinActivate  ;激活它找到的窗口。

当使用这方法时，应该首先列出标题的文字(如果有的话就需要)，后跟一个或多个附加的条件。超出首个的条件必须精确地用一个空格或者 tab 来与前一个分开(任何其他的空格或 tab 将被看作前一个条件的一部分)。

翻译：天堂之门 menk33@163.com 2008年11月5日