窗口标题与文本(高级篇)

AutoIt 支持四种“窗口匹配”模式。若要更改此模式可通过函数 AutoItSetOption 修改 WinTitleMatchMode 属性即可。

 

模式 1 (默认)

只匹配标题的前面部分。

在此模式下,若一个窗口的标题是 无标题 - 记事本 则可使用如“无标题 - 记事本”、“无标题” 甚至是 “无” 等字符串作为窗口标题参数使用。

例如:

    WinWait("无标题")

 

模式 2

标题的任意子串皆可。

在此模式下,若一个窗口的标题是 无标题 - 记事本 则可使用如“无标题 - 记事本”、“无标题”、“记事本” 甚至是 “本” 等字符串作为窗口标题参数使用。

eg.

    WinWait("记事本")

 

模式 3

完全匹配标题。

在此模式下,若一个窗口的标题是 无标题 - 记事本只可使用 “无标题 - 记事本” 作为窗口标题参数使用。

 

模式 4

高级模式。

在此模式下,一些特殊的字符串可用来代替 窗口标题 参数,这样我们就可以使用窗口的 类别名句柄 来识别窗口了。至于 窗口标题 参数维持原样即可。

这些特殊的字符串不能含有空白符(whitespace,一般指空格、制表符、回车等)。它们分别是:

    "classname=CLASSNAME"

    "active"

    "last" 或 ""

 

"classname=" 只匹配具有相同类别名的窗口。例如要识别一个类别名为 “MYCLASS1”的窗口,则可把“classname=MYCLASS1”作为窗口标题 参数使用。


"active"
表示当前激活的窗口(实际作用与默认的 WinTitleMatchMode 模式下的 "" 一样)。


"last" 使用上一次成功匹配的窗口,这样就不必三番四次地指定窗口标题和窗口文本了。例如:

    AutoItSetOption("WinTitleMatchMode", 4)

    WinWaitActive("无标题 - 记事本")

    WinClose("last")    ; 关闭前面匹配成功的记事本窗口


注意: 如果"classname=", "active", "last" 或 "" 都没有作为窗口标题出现在该参数中,则自动以 模式 1 进行匹配。

 

 

窗口句柄(Window Handles / HWNDs )

AutoIt 中的变量可用来存储窗口句柄(HWND)。所谓窗口句柄是指 Windows 自动分配给每个新创建的窗口的特殊值。窗口句柄可用来代替窗口标题参数。使用窗口句柄来代替窗口标题的好处是能够更加精确地识别窗口,比如说有时候我们会同时打开同一应用程序的多个副本,这些窗口具有完全相同的窗口标题窗口文本,这时就可以利用窗口句柄的唯一性来准确识别窗口了。另外,当使用窗口句柄代替窗口标题参数时,窗口文本参数将被完全忽略。

很多函数如 WinGetHandleWinListGUICreate 都会返回窗口句柄。这里要特别提醒大家的是,不能 简单的把窗口句柄归类为数值或者字符串,它是使用特殊的数据类型的。

 

注意:不管当前的 WinTitleMatchMode 被设置为何种模式,窗口句柄始终可用

 

示例

$handle = WinGetHandle("无标题 - 记事本", "")
WinClose($handle)