當(dāng)我們在編寫用以實(shí)現(xiàn)自動(dòng)化操作(通常是指窗口操作)的腳本的時(shí)候,經(jīng)常要解決的一個(gè)問題就是如何(在眾多窗口中)準(zhǔn)確識別出目標(biāo)窗口,一般來說我們把窗口的 標(biāo)題(title) 作為它的ID,有時(shí)候只給標(biāo)題還不夠,這時(shí)就需要同時(shí)給出 標(biāo)題及文本(text)。要獲得某個(gè)窗口的標(biāo)題是件很簡單的事情(直接就可以看到),可以使用 AutoIt 提供的 AutoIt Window Info(窗口信息工具)。大多數(shù)窗口的標(biāo)題都是顯而易見的,例如系統(tǒng)自帶的記事本程序(notepad.exe),它的標(biāo)題是 無標(biāo)題 - 記事本,并不難理解對吧?而且一般來說這就已經(jīng)足以幫助我們完成自動(dòng)化任務(wù)了。
注意:若作為參數(shù)傳遞到窗口函數(shù)的 窗口標(biāo)題 和 窗口文本 都是空字符串""的話,則該函數(shù)的操作目標(biāo)將會是當(dāng)前激活的窗口(但設(shè)置了非默認(rèn)的 窗口匹配模式(WinTitleMatchMode) 時(shí)除外)!
窗口標(biāo)題及其文本是 大小寫敏感(或者說是嚴(yán)格區(qū)分大小寫)的。包括標(biāo)點(diǎn)符號在內(nèi)您必須確保它們是完全匹配的。為了避免在這種小問題上出錯(cuò),您可以使用工具 Window Info 然后選中獲得的標(biāo)題或文本,按下 ctrl-c 復(fù)制之后就可以直接粘貼到腳本中使用了。
AutoIt 的大部分窗口函數(shù)都有窗口標(biāo)題和文本參數(shù),比如說下面的 WinWaitActive 函數(shù)。這個(gè)函數(shù)的功能是使腳本暫停執(zhí)行并 一直等到 指定窗口出現(xiàn)且激活為止。
WinWaitActive ( "窗口標(biāo)題", ["窗口文本"], [超時(shí)時(shí)間] )
其中 窗口標(biāo)題 是必須指定的參數(shù),而 窗口文本 和 超時(shí)時(shí)間 都是可選參數(shù)。不過也有些函數(shù)的 窗口文本 參數(shù)是必須指定的,如果想省略這個(gè)參數(shù)的話只需指定 "" (表示空字符串)作為參數(shù)即可。在參數(shù) 窗口文本 中指定一個(gè)空字符串或者干脆留空的話相當(dāng)于告訴 AutoIt 任何文本都是有效的(反正只管標(biāo)題匹配了就OK)。
下面以記事本窗口為例說明上面提到的函數(shù)的兩種用法:
WinWaitActive("無標(biāo)題 - 記事本")
以及
WinWaitActive("無標(biāo)題 - 記事本", "")
如果我們打些字到該窗口上,比如說“這里是足以區(qū)分其它記事本窗口的文字”,則在 Window Info 的窗口上將會顯示相關(guān)信息:
我們可以注意到 Window Info 已經(jīng) “看到” 了這個(gè)記事本窗口的標(biāo)題及文本并顯示出來了。記住,凡是 Window Info Tool 能“看到”的 AutoIt 也能“看到”(指能在腳本中使用)。現(xiàn)在我們得到的這些信息已經(jīng)足以用來準(zhǔn)確識別此窗口了(就算此時(shí)還打開了很多記事本窗口)。這時(shí)我們應(yīng)該這么使用函數(shù):
WinWaitActive("無標(biāo)題 - 記事本", "這里是足以區(qū)分其它記事本窗口的文字")
作為參數(shù)使用的窗口文本必須是符合 AutoIt 的要求。一般來說有效的文本是指編輯框控件內(nèi)的文本(比如像上面的“這里是足以區(qū)分其它記事本窗口的文字”),此外還可以使用下面這些文本:
另外還有一個(gè)必須了解的技巧就是除了上面這些文本之外,很多程序窗口的標(biāo)題會根據(jù)操作對象的不同而不同(通常會在默認(rèn)標(biāo)題后附加),因此把接在標(biāo)題后的文本作為窗口文本參數(shù)使用也是可以的。
其實(shí)我們傳遞到窗口函數(shù)中的 窗口文本 參數(shù)是被 AutoIt 當(dāng)作子串(substring)來處理的。還是以上面的記事本窗口為例,即使把“區(qū)分其它記事”作為窗口文本參數(shù)也是可以獲得同樣效果的。
前面提到的所有應(yīng)用都是以在 默認(rèn) 模式下操作為例的,AutoIt 還提供了其它幾種 更高級
的方法,可能會稍微比這里的難一點(diǎn) :)