SetTitleMatchMode

设置 WinTitle parameter 在内置函数中的匹配行为, 如 WinWait.

SetTitleMatchMode MatchMode
SetTitleMatchMode Speed

参数

MatchMode

类型: 整数字符串

指定下列值之一:

1: 窗口标题必须以指定的 WinTitle 开头才能匹配.

2: 默认行为. 窗口标题的任意位置包含有 WinTitle 才能匹配.

3: 窗口标题必须和 WinTitle 完全一致才能匹配.

RegEx: 使 WinTitle, WinText, ExcludeTitleExcludeText 接受正则表达式, 例如, WinActivate "Untitled.*Notepad". RegEx 还适用于 ahk_classahk_exe, 例如, "ahk_class IEFrame" 会搜索类名包含有 IEFrame 的所有窗口(这是由于在默认情况下, 正则表达式在目标字符串 任意位置 查找匹配). 对于 WinTitle, 每个部分是分开的. 例如, 在 "i)^untitled ahk_class i)^notepad$ ahk_pid " mypid 中, i)^untitledi)^notepad$ 都是独立的正则模式, 且 mypid 总是比较数值(它并不是一个正则模式). 对于 WinText, 每个文本元素(比如, 每个控件的文本) 都是独立匹配正则表达式的. 因此, 它不可能有跨越多个文本元素的匹配.

上面的模式还会对 ExcludeTitle 产生与 WinTitle 相同的影响. 例如, 模式 3 要求被排除的窗口的标题必须准确匹配 ExcludeTitle.

Speed

类型: 字符串

指定以下单词之一, 来指示 WinTextExcludeText 参数应如何匹配:

Fast: 默认行为. 性能可能大大优于慢速模式, 但某些类型的控件不会被检测到. 例如, 文本通常会在静态和按钮控件中被检测到, 但不会在编辑控件中被检测到, 除非它们为脚本所拥有.

Slow: 速度慢得多, 但适用于所有能响应 WM_GETTEXT 消息的控件.

返回值

类型: 整数字符串

函数返回被改变的设置(A_TitleMatchModeA_TitleMatchModeSpeed) 的先前值.

备注

如果没有使用 SetTitleMatchMode, 默认的匹配模式为 2, 且默认的速度为.

此函数影响所有窗口函数的行为, 例如 WinExistWinActivate. WinGetTextControlGetText 受影响的方式与其他函数相同, 但它们总是使用慢速模式来检索文本.

如果使用窗口组, 则当前标题匹配模式适用于组中的每个单独的规则.

通常, 只有在无法通过其标题和快速-模式文本唯一标识目标窗口时, 才应该使用慢速模式. 这是因为当任意一个应用程序窗口正忙或 "无响应" 时, 慢速模式会非常慢.

Window Spy 有 Slow TitleMatchMode 的选项, 所以它很容易确定是否需要慢速模式.

如果您想同时改变两个属性, 请执行函数两次, 例如:

SetTitleMatchMode 2
SetTitleMatchMode "Slow"

内置变量 A_TitleMatchModeA_TitleMatchModeSpeed contain 包含了当前的设置.

不管当前的匹配模式如何, WinTitle, WinText, ExcludeTitleExcludeText 都是区分大小写的. 唯一的例外是带不区分大小写选项的 RegEx 模式; 例如, "i)untitled - notepad".

每个新运行的线程(如 热键, 自定义菜单项定时子程序) 都会以此函数的默认设置开始. 这个默认设置可以通过在脚本启动中使用此函数来改变.

The WinTitle Parameter, SetWinDelay, WinExist, WinActivate, RegExMatch

示例

强制窗口函数操作在开头处包含 WinTitle 而不是任意地方的窗口.

SetTitleMatchMode 1

允许窗口函数尽可能地检测更多的控件类型, 但性能较低. 注意, Slow/Fast 可以独立于其他所有模式进行设置.

SetTitleMatchMode "Slow"

使用 RegEx 模式可轻松排除多个窗口. 将以下 ExcludeTitle 替换为您希望从计数中排除的实际窗口的标题.

SetTitleMatchMode "RegEx"
CountAll := WinGetCount()
CountExcluded := WinGetCount(,, "ExcludeTitle1|ExcludeTitle2")
MsgBox CountExcluded " out of " CountAll " windows were counted"