注意:視窗標題和視窗文字引數總是對大小寫敏感的。
1、等待視窗系列命令/函式
ahk和au3都提供了用法類似的一組視窗等待命令/函式:winwait/winwaitactive/winwaitclose。
它們分別用於等待視窗出現、等待視窗被啟用、等待視窗被關閉。由於這些命令/函式的引數類似,現僅以winwait為例說明。
ahk:
winwait [, 視窗標題, 視窗文字, 超時時間, 排除標題, 排除文字]
au3:
winwait ( "視窗標題" [, "視窗文字" [, 超時時間]] )
winwait 的作用是在目標視窗出現之前不再執行後面的所有語句。
假設我們要執行記事本程式,並在其視窗出現時提示使用者:
【示例 3.1.1 】
ahk:
run notepad
winwait, 無標題 - 記事本
msgbox 記事本視窗已被開啟!
au3:
run("notepad")
winwait("無標題 - 記事本")
msgbox(0, "", "記事本視窗已被開啟!")
2、啟用視窗相關命令/函式
讓目標視窗成為活動視窗的辦法就是啟用它,可用的命令/函式是winactivate:
ahk:
winactivate [,視窗標題, 視窗文字, 排除標題, 排除文字]
au3:
winactivate ( "視窗標題" [, "視窗文字"] )
3、關閉視窗
關閉視窗有兩種方式,一種是正常的關閉視窗(winclose),另一種則是強行關閉視窗(winkill):
ahk:
winclose/winkill [,視窗標題, 視窗文字, 超時時間,, 排除標題, 排除文字]
au3:
winclose/winkill ( "視窗標題" [, "視窗文字"] )
現在我們已經可以實現乙個比較簡單的功能了,比如我們可以開啟系統屬性視窗並等待其出現,視窗出現後啟用它,接著等待3秒再關閉它:
【示例 3.1.2 】
ahk:
run, sysdm.cpl
winwait, 系統屬性
winactivate, 系統屬性
winwaitactive, 系統屬性
sleep, 3000
winclose, 系統屬性
winwaitclose, 系統屬性
au3:
run("control sysdm.cpl")
winwait("系統屬性")
winactivate("系統屬性")
winwaitactive("系統屬性")
sleep(3000)
winclose("系統屬性")
winwaitclose("系統屬性")
4、更準確的標識視窗的方法(主要針對ahk指令碼)
程式在執行時起碼會有乙個程序,如果能獲得這個程序id就能在一定程度上保證對視窗的準確標識。另外,每個視窗都有定義視窗類名(class,比如說記事本視窗的類名就是notepad),所以我們可以以此排除與目標視窗不同的其它視窗類。其實,我們還有乙個更準確的方法:
每個視窗(包括控制項在內)都被windows指派了乙個可區別於其它視窗的唯一的識別符號(id),我們稱之為視窗控制代碼(hwnd)。
直接給定視窗標題來表示視窗的乙個缺點就是無法保證在指令碼執行的過程中始終以該視窗為操作目標,因為在這個過程中很有可能會有其它「同名」視窗(或者說滿足匹配條件的視窗)出現,而如果我們使用這個識別符號來表示視窗自然就能保證命令/函式的操作視窗總是同乙個視窗了。
我們先來了解一下獲得視窗控制代碼的命令/函式:
ahk:
winget[, 輸出變數, id, 視窗標題, 視窗文字, 排除標題, 排除文字]
au3:
wingethandle ( "視窗標題" [, "視窗文字"] )
其中winget獲得的視窗id將通過「輸出變數」返回,而wingethandle的返回值就是獲得的視窗id。
我們在進行自動化操作時是要先執行某個程式,如何獲得這個程式成功執行後顯示的視窗控制代碼?乙個比較保險的辦法是先獲得這個程式的程序id,然後根據這個程序id獲得它的視窗控制代碼,ahk支援使用程序id作為視窗標題使用;但au3不支援這樣使用,只能先獲得該視窗的類名再根據該類名來獲得視窗控制代碼(不夠保險):
【示例 3.1.3 】
ahk:
run, notepad, , , thispid
winwait, ahk_pid %thispid%
;這裡的ahk_pid表明跟在後面的變數是程序id
winget, thisid, id, ahk_pid %thispid%
;thisid將儲存獲得的視窗控制代碼
au3:
opt("wintitlematchmode", 4)
run("notepad")
$handle = wingethandle("classname=notepad")
現在暫且先忘記了au3吧,因為它的視窗函式一般都不支援使用視窗控制代碼作為(視窗標題)引數。
至於如何在ahk中使用視窗控制代碼,簡單的說,凡是有「視窗標題」引數的命令就可以用視窗控制代碼來代替,比如:
【示例 3.1.4 】
ahk:
run, notepad, , , thispid
;先獲得執行的記事本程式的程序id
winwait, 無標題 - 記事本 ahk_pid %thispid%
;等待該程序視窗的出現
winget, thishwnd, id, 無標題 - 記事本 ahk_pid %thispid%
;獲得視窗控制代碼
winactivate, ahk_id %thishwnd%
;這裡的ahk_id表明跟在後面的變數是視窗控制代碼
winwaitactive, ahk_id %thishwnd%
sleep, 3000
winclose, ahk_id %thishwnd%
winwaitclose, ahk_id %thishwnd%
詳細出處參考:
AutoIt自動化程式設計 1
1 執行程式 run命令或者函式用來執行外部可執行檔案 au3 run 檔名 工作目錄 標誌 example au3 run notepad.exe 上面的示例中都沒有給出程式 notepad.exe 的路徑,為什麼仍能執行?這是因為它們都會自動在指令碼所在目錄下搜尋目標檔案,如有則執行,否則就到系...
AutoIt 軟體自動化操作
autoit 目前最新是v3版本,這是乙個使用類似basic指令碼語言的免費軟體,它設計用於windows gui 圖形使用者介面 中進行自動化操作。它利用模擬鍵盤按鍵,滑鼠移動和視窗 控制項的組合來實現自動化任務。而這是其它語言不可能做到或無可靠方法實現的 例如vbscript和sendkeys ...
使用AutoIT做自動化測試
使用autoit做自動化測試 1.課程設計目的 1 理解自動化測試 2 學會應用autoit進行自動化測試 2.課程設計內容 1 在文字中編輯數學表示式 2 使用autoit讀取該本文進行計算,並將結果儲存 3.課程設計過程 1 安裝autoit軟體,閱讀文件和學習案例 2 設計測試用例 3 使用a...