窗口标题与文本(基础篇)

当我们在编写用以实现自动化操作(通常是指窗口操作)的脚本的时候,经常要解决的一个问题就是如何(在众多窗口中)准确识别出目标窗口,一般来说我们把窗口的 标题(title) 作为它的ID,有时候只给标题还不够,这时就需要同时给出 标题及文本(text)。要获得某个窗口的标题是件很简单的事情(直接就可以看到),可以使用 AutoIt 提供的 AutoIt Window Info(窗口信息工具)。大多数窗口的标题都是显而易见的,例如系统自带的记事本程序(notepad.exe),它的标题是 无标题 - 记事本,并不难理解对吧?而且一般来说这就已经足以帮助我们完成自动化任务了。 

 

注意:若作为参数传递到窗口函数的 窗口标题窗口文本 都是空字符串""的话,则该函数的操作目标将会是当前激活的窗口(但设置了非默认的 窗口匹配模式(WinTitleMatchMode) 时除外)!

 

窗口标题及其文本是 大小写敏感(或者说是严格区分大小写)的。包括标点符号在内您必须确保它们是完全匹配的。为了避免在这种小问题上出错,您可以使用工具 Window Info 然后选中获得的标题或文本,按下 ctrl-c 复制之后就可以直接粘贴到脚本中使用了。

 

AutoIt 的大部分窗口函数都有窗口标题和文本参数,比如说下面的 WinWaitActive 函数。这个函数的功能是使脚本暂停执行并 一直等到 指定窗口出现且激活为止。

WinWaitActive ( "窗口标题", ["窗口文本"], [超时时间] )

 

其中 窗口标题 是必须指定的参数,而 窗口文本超时时间 都是可选参数。不过也有些函数的 窗口文本 参数是必须指定的,如果想省略这个参数的话只需指定 "" (表示空字符串)作为参数即可。在参数 窗口文本 中指定一个空字符串或者干脆留空的话相当于告诉 AutoIt 任何文本都是有效的(反正只管标题匹配了就OK)。

 

下面以记事本窗口为例说明上面提到的函数的两种用法:

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

以及

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

 

如果我们打些字到该窗口上,比如说“这里是足以区分其它记事本窗口的文字”,则在 Window Info 的窗口上将会显示相关信息:

 

 

我们可以注意到 Window Info 已经 “看到” 了这个记事本窗口的标题及文本并显示出来了。记住,凡是 Window Info Tool 能“看到”的 AutoIt 也能“看到”(指能在脚本中使用)。现在我们得到的这些信息已经足以用来准确识别此窗口了(就算此时还打开了很多记事本窗口)。这时我们应该这么使用函数:

 

WinWaitActive("无标题 - 记事本", "这里是足以区分其它记事本窗口的文字")

 

窗口文本

作为参数使用的窗口文本必须是符合 AutoIt 的要求。一般来说有效的文本是指编辑框控件内的文本(比如像上面的“这里是足以区分其它记事本窗口的文字”),此外还可以使用下面这些文本:

另外还有一个必须了解的技巧就是除了上面这些文本之外,很多程序窗口的标题会根据操作对象的不同而不同(通常会在默认标题后附加),因此把接在标题后的文本作为窗口文本参数使用也是可以的。

其实我们传递到窗口函数中的 窗口文本 参数是被 AutoIt 当作子串(substring)来处理的。还是以上面的记事本窗口为例,即使把“区分其它记事”作为窗口文本参数也是可以获得同样效果的。

前面提到的所有应用都是以在 默认 模式下操作为例的,AutoIt 还提供了其它几种 更高级 的方法,可能会稍微比这里的难一点 :)