




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
****Autoit快速開發(fā)指南2012年9月6日Autoit開發(fā)指南啟動程序啟動exe類型文件,一般使用Run函數(shù)Run("路徑”)如:Run(“D:\Java\MyEclipse6\eclipse\eclipse.exe”)如果運(yùn)行該函數(shù),程序還沒有啟動起來,請配置好程序運(yùn)行的工作目錄Run("路徑”,"工作目錄”)如:Run(“D:\Java\MyEclipse6\eclipse\eclipse.exe”:D:\Java\MyEclipse6\eclipse”)目棟類型應(yīng)用程序目標(biāo)teS:ac=lipsa注:有時程序的目錄不一定和工作目錄相同啟動lnk,txt等文件一般使用ShellExecute函數(shù)該函數(shù)除了可以指定工作目錄外,還可以設(shè)置啟動參數(shù)1?窗口操作窗口處理一般都是針對WindowsGUI窗口的操作,常用的如下:;窗口是否存在
還有其他一些處理函數(shù),這個可以直接去查找Autolt的幫助文檔。下面是一個例子,一般在很多地方用到,特別是程序啟動或者運(yùn)行到某個步驟,等待其他窗口處理,一般采用以下腳本判斷WinWait(“窗口標(biāo)題”,"窗口文本","等待時間”)IfWinExists("窗口標(biāo)題”)ThenWinActivate("窗口標(biāo)題”)Endlf不建議使用WinWaitActive("窗口標(biāo)題”,"窗口文本等待時間”),否則,如果該窗口處于非激活狀態(tài),會使腳本一直等待直到超時,按照非預(yù)設(shè)的流程解析運(yùn)行下去,得不到預(yù)期結(jié)果。1?菜單操作wEl文件?:丄、K石2】IM憎.<±>F'i'E<UJ-fitjl'i<JL'j±TdnJ=.Ctrl_-i-C8焜畝:主)Ctrl_+E頁面說:K垃―…打印広)….utrl+rH送曲…遅:H為士唐細(xì)〔平申P(guān)T)俎J遅弩為壇古氏倨■中bg菜單點(diǎn)擊使用WinMenuSelectltem函數(shù)WinMenuSelectltem(“窗口標(biāo)題”,"","主菜單”,"子菜單1”,"子菜單2”......)例如點(diǎn)擊窗口菜單的文件二》保存WinMenuSelectItem("未命名一畫圖","","文件",”保存")當(dāng)該函數(shù)無法操作菜單時候(一般為非標(biāo)準(zhǔn)的WindowsGUI),可以在工具欄查找該菜單的快捷啟動按鈕或者通過發(fā)送快捷鍵進(jìn)行控制3?工具欄操作文件世J滿輯運(yùn)J查若曲收菇⑧工具(T)窮助QfjO后退-尸崔親g?文怦夾Itn?]地址①)Ir2^D:\Froject對于工具欄快速按鈕,可以使用ControlCommand函數(shù)處理,菜單操作中很多快捷方式一般都放在工具欄中,這種情況可以多一個選擇。ControlCommand(“窗口標(biāo)題”,"窗口文本",”工具欄控件名”,"SendCommandlD",控件ID”)ControlCommand只能操作ToolbarWindow32類型的控件。控件ID需要通過WindowsInfo工具獲取。5.1文本框在文本框輸入數(shù)據(jù)使用:ControlSetText("標(biāo)題”,"","控件名或ID”,"輸入的字符串?dāng)?shù)據(jù)”)如果需要獲取文本框的數(shù)據(jù),則使用ControlGetText("標(biāo)題”,"","控件名或ID”)ControlSetText和ControlGetText可以操作單行文本框,密碼輸入框,多行文本框等。5.2選擇控件」」1時左回魚小站號:運(yùn)行系編:普通忠選擇控件使用ControlCommand函數(shù)操作,可以操作單選多選以及單行多行下拉選擇(ComboBox和ListBox)等控件。如選擇下拉框的某個選項(xiàng):ControlCommand(“窗口標(biāo)題”,"",控件類名或ID,"SelectString",選中選項(xiàng)文本)而針對Radio,CheckBox等選擇類型的控件ControlCommand("窗口標(biāo)題","",控件類名或ID,"check","”)而對于ListBox類型的選擇框,則需要通過一系列組合來操作選項(xiàng),如下面是獲取所有選項(xiàng)數(shù)據(jù)的例子:1.點(diǎn)擊操作6.1控件點(diǎn)擊控件點(diǎn)擊一般使用:ControlClick("窗口標(biāo)題","","控件名或ID","按鈕","點(diǎn)擊次數(shù)")按鈕分左鍵(left),右鍵(right)等此外還可以在函數(shù)后面添加坐標(biāo),這對于占用屏幕區(qū)域比較大的時候,精確點(diǎn)擊某個位置觸發(fā)其他操作比較重要比如在一個表格中,需要右擊某一行記錄,彈出右鍵菜單的情況。6.2鼠標(biāo)點(diǎn)擊MouseClick(“按鈕”,“X坐標(biāo)”,”Y坐標(biāo)”,"點(diǎn)擊次數(shù)”)MouseClick函數(shù)對于任何點(diǎn)擊操作都有效唯一不理想的是,它涉及坐標(biāo)點(diǎn)的確定,降低了程序的通用性如果非要這么做,建議:1)將當(dāng)前窗口激活,并最大化2)如果當(dāng)前窗口禁用最大化,則使用當(dāng)前窗口相對坐標(biāo)進(jìn)行操作AutoItSetOption(”MouseCoordMode",1);這里指相對當(dāng)前激活窗口的坐標(biāo)WinActivate"窗口標(biāo)題","");接下來進(jìn)行鼠標(biāo)點(diǎn)擊相關(guān)操作2.鍵盤操作鍵盤操作一般使用Send函數(shù),想激活窗口發(fā)送模擬鍵盤操作7.1一般字符這種情況指向當(dāng)前激活窗口文本框,發(fā)送按鍵字符,如:Send("向光標(biāo)激活地方發(fā)送的字符串")7.2快捷操作這種情況一般沒有光標(biāo)的輸入,只是針對當(dāng)前的激活窗口的一些快捷操作,比如按鍵”ctrl+S”是保存等,Send("As")另外一些快捷鍵如:Ctrl=人3.字符串處理針對字符串的處理,一般常需要判斷字符串是否存在,或?qū)ψ址M(jìn)行拆分、替換等,下面用一個例子來說明一下:一個用&&連接的子字符串,需要跟某段文字進(jìn)行匹配,如果發(fā)現(xiàn)存在子存在,則替換成指定的字符串$originalStr二""$matchStr二"政府&&奶奶的"$array=StringSplit($matchStr,1)If$i=1To$array[0]ThenIfStringlnStr($originalStr,$array[$i])>0Then$originalStr=StringReplace($originalStr,$array[$i,"XXX")EndlfEndIf其他可以參考官方幫助文檔。4.數(shù)組處理數(shù)組可以包含不同數(shù)據(jù)類型的數(shù)據(jù),處理起來有兩種情況需要注意9.1一般數(shù)組9.2特殊數(shù)組特殊數(shù)組指某些函數(shù)的返回值為數(shù)組的情況,或是在運(yùn)行腳本時候,傳遞給命令行的參數(shù),AutoIT會初始化一個特殊的數(shù)組,這些數(shù)組下標(biāo)也是從0開始,但是為0的項(xiàng)保存的是數(shù)組的個數(shù)。命令行返回數(shù)組對于腳本參數(shù)數(shù)組為$CmdLine,可以直接使用$CmdLine[0];參數(shù)的數(shù)量$CmdLine[1];第一個參數(shù)(腳本名稱后面)$CmdLine[2];第二個參數(shù)$CmdLine[$CmdLine[0]];可以用來表示得到最后一個參數(shù)...如果腳本是像下面這樣被運(yùn)行的話:AutoIt3.exemyscript.au3參數(shù)1"這是一個其它參數(shù)"$CmdLine[0]等價于...2$CmdLine[1]等價于...參數(shù)1$CmdLine[2]等價于...這是一個其它參數(shù)@ScriptName等價于...myscript.au3函數(shù)返回數(shù)組前面用到的StringSplit函數(shù)返回值也是一個數(shù)組,0位保存的是數(shù)組項(xiàng)的個數(shù),數(shù)組內(nèi)卻是從1開始計數(shù)$matchStr二"11&&22&33"$array=StringSplit($matchStr,1)如上:$array[0]等于4$array[1]等于"11”$array[2]等于"22"$array[3]等于"33"其他還有另外一些特殊的函數(shù),如FileGetTime,WinList等等很多函數(shù),返回值都是數(shù)組的情況,具體用法可能有些差異,這些可以參考相關(guān)文檔。5.日期時間當(dāng)前日期時間,可以直接從日期和時間宏中獲取,如:@SEC當(dāng)前時鐘的秒值,值的范圍是00到59@MIN當(dāng)前時鐘的分值,值的范圍是00到59@HOUR當(dāng)前時鐘的時值(24時制),值的范圍是00到23@MDAY當(dāng)天屬本月的第幾天,值的范圍是01到31@MON當(dāng)前月份,值的范圍是01到12@YEAR當(dāng)前年份(4位數(shù))計算指定日期間隔后的新日期:_DateAdd(“計算類型”,“間隔數(shù)”,"指定日期”)計算兩個指定日期的間隔:_DateDiff(“計算類型”,“計算的開始日期”,"計算的結(jié)束日期”)6.像素捕獲像素捕獲主要去獲取屏幕某塊區(qū)域像素點(diǎn)的色值,以此和給定的顏色色值來比較判斷是否一致。WinActivate("-窗口標(biāo)題")$Handle=WinGetHandle("窗口標(biāo)題","")AutoItSetOption("PixelCoordMode",2)$Color=PixelGetColor(X坐標(biāo),Y坐標(biāo):,$Handle)$ColorStr=Hex($Color,6)在實(shí)際情況中,有時可能不止獲取一個點(diǎn)的像素就夠了,這時可以通過獲取窗口的相關(guān)WinGetPos("窗口標(biāo)題","")坐標(biāo)位置,然后對某個區(qū)塊進(jìn)行掃描。7.文件操作12.1.一般文件對于一般文本文件的讀取:可以使用FileOpen打開文件,在按照要求讀取文件內(nèi)容:$fHandle=FileOpen("文件",0)if$fHandle<>-1ThenWhile1如果文件被獨(dú)占打開,進(jìn)行FileOpen操作時候,獲取不到文件操作句柄,無法對文件進(jìn)行讀寫操作,這時,如果只是針對文件讀,可以將獨(dú)占打開的文件進(jìn)行一下復(fù)制,然后用拷貝文件進(jìn)行目標(biāo)操作。FileCopy("原文件;"目標(biāo)文件或路徑",1)12.2.ini文件對于ini類型文件,形如:[字段名]關(guān)鍵字二數(shù)值文件中可以有多個不同的字段名,每個字段名下有多個關(guān)鍵字,不同字段名下的關(guān)鍵字可以相同讀取ini文件:IniRead("文件名","字段名","關(guān)鍵字","默認(rèn)值")寫入ini文件:IniWrite("文件名","字段名","鍵名","值")刪除ini文件:IniDelete("文件名","字段名"[,"關(guān)鍵字"])&常用控件操作13.1.ListBox控件ListBox控件,如圖所示:v09:06:58歡電?總躁證型信如0引紂翦瑕収程厚CRcvSDQE,馥亟tl期対20061010nv09:06:59正狂連接服務(wù)§8=5……帀09:06:59與服務(wù)器5連接成功<帀丁同:':丁同:':2010-08^2509:06:02°09:06:02市開市時IB::09:55-11:00,11:05-11:45_門□?門匚士吉上云矗2厝;半r-fTCVVTiPTT-1Qri9fl.frtlRl9n1n-nfl-^c:no■c-c■on在前面提到選擇控件,ListBox也是其中一種,前面介紹了如何選中的某行選項(xiàng),但是在真正的ListBox空間中,多半是記錄相關(guān)軟件運(yùn)行時的一些狀態(tài)參數(shù)記錄,需要做的只判斷其中打印的相關(guān)記錄:$hWnd=ControlGetHandle("窗口標(biāo)題","",ListBox控件名)$count=_GUICtrlListBox_GetCount($hWnd)For$i=0To$count-1$hLabel=_GUICtrlListBox_GetText($hWnd,$i)Next其中第一行是獲取控件操作句柄,第二行根據(jù)句柄獲取控件的記錄條數(shù),最后根據(jù)記錄上遍歷,獲取每一條記錄。13?2?ListView控件ListView控件展示形如表格,如圖所示:其操作如下ListView控件展示形如表格,如圖所示:其操作如下$rows=ControlListView("窗口標(biāo)題","","ListView控件名","GetItemCount")For$i=0To$rows-1$iText=ControlListView("窗口標(biāo)題","","ListView控件名","GetText",$i,"列名序號")Next上面代碼,我們首先獲取行數(shù),然后指定某列,獲取其所有行的文本。更多ListView操作可以參考ControlListView函數(shù)說明。9.運(yùn)行參數(shù)設(shè)置運(yùn)行參數(shù)設(shè)置可以調(diào)整Autoit各種函數(shù)/參數(shù)的運(yùn)作方式,可以通過Opt或者AutoltSetOption函數(shù)來設(shè)置:AutoItSetOption("選項(xiàng)"[,參數(shù)])如:Opt("PixelCoordMode",2)或AutoItSetOption("PixelCoordMode",2)常用的有:Opt("PixelCoordMode",2);設(shè)置用于象素函數(shù)的坐標(biāo)參照Opt("GUIEventOptions",1);修改特殊的GUI函數(shù)的返回值類型Opt("MouseClickDelay",500);更改每個鼠標(biāo)點(diǎn)擊命令之間的延遲時間長度Opt("SendKeyDelay",1000);更改發(fā)送鍵擊命令之間的延遲時間長度Opt("TrayIconDebug",1);在托盤圖標(biāo)上顯示當(dāng)前腳本執(zhí)行到的那一行的相關(guān)信息(工具提示)以助調(diào)試Opt("WinWaitDelay",500);更改每次成功執(zhí)行窗口相關(guān)操作后的延遲時間長度更多運(yùn)行參數(shù)設(shè)置可以參考AutoItSetOption幫助文檔說明10.加密解密15.1.加密;$bEncrypted為加密后字符串_Crypt_Startup()$hKey=_Crypt_DeriveKey("sop",$CALG_RC4)$bEncrypted=_Crypt_EncryptData("待加密字符",$hKey,$CALG_USERKEY)_Crypt_DestroyKey($hKey)_Crypt_Shutdown()這里加密的是一個16進(jìn)制的字符串,其中加密匙可以自己設(shè)置,示例中為sop,其中加密算法為AutoIt內(nèi)置的$CALG_RC4,還可以為$CALG_RC2等等其他。15.2.解密;$encrypt為解密后字符串$bData=Binary("加密的字符”)$encrypt=BinaryToString(_Crypt_DecryptData($bData,"sop",$CALG_RC4))很簡單的兩行,不過其中的解密匙和解密算法要跟之前的加密參數(shù)對應(yīng)。11.GUI操作GUI操作包括創(chuàng)建窗口面板,在面板上創(chuàng)建表單控件及其互動事件處理等一系列連貫配置:$hWnd二GUICreate("加密",400,300,-1)$hlnputEdit二GUICtrlCreateEdit("",0,0,400,150,$ES_WANTRETURN)$hOutputEdit二GUICtrlCreateEdit("",0,150,400,150,$ES_READONLY)GUIRegisterMsg($WM_COMMAND,"WM_COMMAND")GUISetState(@SW_SHOW)_Crypt_Startup()$hKey=_Crypt_DeriveKey("sop",$CALG_RC4)Do$msg=GUIGetMsg()Until$msg=$GUI_EVENT_close_Crypt_DestroyKey($hKey)_Crypt_Shutdown()FuncWM_COMMAND($hWinHandle,$iMsg,$wParam,$lParam)If_WinAPI_HiWord($wParam)=$EN_CHANGEAnd_WINAPI_LoWord($wParam)=$hInputEditThen$bEncrypted=_Crypt_EncryptData(GUICtrlRead($hInputEdit),$hKey,$CALG_USERKEY)GUICtrlSetData($hOutputEdit,$bEncrypted)EndIfEndFunc上面是一個簡單界面包裝,一旦界面檢測到$WM_COMMAND事件響應(yīng),即觸發(fā)自定義函數(shù)WM_COMMAND,窗口包括兩個簡單的文本編輯控件。我們還可以設(shè)置其他控件的事件處理:Opt("GUIOnEventMode",1)$winTitle="配置密碼"$handle=GUICreate($winTitle,300,200)$btn=GUICtrlCreateButton("確定",15,60,50,25,$BS_CENTER)GUISetState(@SW_SHOW,$handle)GUICtrlSetOnEvent($btn,"GetPwd")FuncGetPwd($hWinHandle,$iMsg,$wParam,$lParam)EndFunc這里是針對按鈕設(shè)置了點(diǎn)擊觸發(fā)事件。12.IE操作IE操作,不像GUI界面一樣,通過AutoItWindowInfo就能得到相關(guān)控件,進(jìn)而獲取控件句柄進(jìn)行操作。我們在操作IE網(wǎng)頁時候,需要事先獲取HTML頁面中的相關(guān)Dom節(jié)點(diǎn)或元素,所以需要對HTML有一些了解。下面是一個簡單的例子:$oIE=_IECreate("",0,1,1,0)_IEPropertySet($oIE,"statustext","歡迎訪問")$oForm=_IEFormGetObjByName($oIE,"f");查找表單名$oQuery1=_IEFormElementGetObjByName($oForm,"wd")查找表單控件_IEFormElementSetValue($oQuery1,"賦值");給控件賦值_IEFormSubmit($oForm,1);點(diǎn)擊提交表單請求實(shí)例是一個簡單操作,打開一個IE窗口,訪問百度,然后在搜索網(wǎng)頁表單,輸入一個要查詢的關(guān)鍵字,點(diǎn)擊百度搜索。一般網(wǎng)頁很多超鏈接,對于這些鏈接的頁面,都有很多的Dom節(jié)點(diǎn)嵌套,單純的以對象名稱不一定能夠獲取到某個操作的對象,這時需要從頂級Dom節(jié)點(diǎn),一級一級縮小范圍,直到獲取到最終操作對象節(jié)點(diǎn),如下所示:$oIE=_IECreate("",0,1,1,0)$iFrame=_IEFrameGetObjByName($oIE,"iFrame")$oDiv=_IEGetObjById($iFrame,"divId")$ohrefArray=_IETagNameGetCollection($oDiv,"a")For$oLinkIn$ohrefArrayIf$oLink.href=""then_IEAction($oLink,'click')ExitLoopEndIfNext這里實(shí)例主要是從一個打開的瀏覽器窗口,獲取名為iFrame的frame頁面,然后獲取其中為Id為divId的節(jié)點(diǎn),進(jìn)而,取到divId節(jié)點(diǎn)下的所有超鏈接對象,最后一個一個判斷,找到某個url,點(diǎn)擊超鏈接。13.自定義函數(shù)把一些常用而相關(guān)邏輯的操作,抽離出來,獨(dú)立成一個模塊,供腳本調(diào)用,這就需要涉及到自定義函數(shù)。用戶可通過使用Func...EndFunc語句來自定義函數(shù),函數(shù)中可以有Return返回值,也可以無,下面我們列出了一些常用的自定義函數(shù),供參考:#inelude<include/String.au3>#Inelude<include/date.au3>#inelude<include/Array.au3>#Inelude<include/EventLog.au3>#Include<include/File.au3>#Include<include/ScreenCapture.au3>#include<include/GUIListBox.au3>#include<include/Crypt.au3>;獲取配置文件FuncGetConfigFile()ReturnString("D:\Digitalchina'AutoAgent\scripts\ConfigParameter.ini")EndFunc;根據(jù)給定的日期格式字符串轉(zhuǎn)換成當(dāng)前日期格式FuncReplaceDateStr($DateStr)SelectCaseStringlnStr($DateStr,"YYYYMMDD")ReturnStringReplace($DateStr,"YYYYMMDD",DateYYYY()&DateMM()&DateDD())CaseStringlnStr($DateStr,"YYYY-MM-DD")ReturnStringReplace($DateStr,"YYYY-MM-DD",DateYYYY()&"-"&DateMM()&"-"&DateDD())CaseStringInStr($DateStr,"YYYY/MM/DD")ReturnStringReplace($DateStr,"YYYY/MM/DD",DateYYYY()&"/"&DateMM()&"/"&DateDD())CaseStringlnStr($DateStr,"ABCDD-YYYY");ABC代表英文的短月份格式,如1月=JanReturnStringReplace($DateStr,"ABCDD-YYYY",_DateToMonth(@MON,1)&DateDD()&"-"&DateYYYYO)CaseStringInStr($DateStr,"MMDD")ReturnStringReplace($DateStr,"MMDD",DateMM()&DateDD())CaseElseReturn$DateStrEndSelectEndFunc;返回日期格式FuncDateYYYYOReturnString(@YEAR)EndFuncFuncDateYY()ReturnStringRight(String(@YEAR),2)EndFuncFuncDateMM()ReturnString(@MON)EndFuncFuncDateDD()ReturnString(@MDAY)EndFunc;寫日志,截屏等操作;$fileName日志文件;$flag操作標(biāo)識1為成功,0為失敗;$logTxt寫入日志內(nèi)容,增加在行尾FuncWriteLog($fileName,$flag,$logTxt);根據(jù)代理約定的相對目錄$File_dat=$fileName&".dat"$File_do=$fileName&".do"$File_jpg=$fileName&".jpg";截屏文件_ScreenCapture_Capture($File」pg);如果截屏失敗,則啟動畫板IfFileExists($File_jpg)=0ThenSaveImage($File_jpg)EndIf;腳本執(zhí)行結(jié)果文件$file1二FileOpen($File_dat,2)FileWriteLine($file1,$flag)FileWriteLine($file1,$logTxt)FileClose($file1);狀態(tài)文件$file2二FileOpen($File_do,2)FileWriteLine($file2,"ok")FileClose($file2)EndFunc;啟動畫圖程序,將全屏截圖保存為文件;$imgFile文件保存路徑FuncSaveImage($imgFile)Send("{PRINTSCREEN}")$picProcess="mspaint.exe"$pid=Run("mspaint.exe")$picWin="未命名-畫圖"$warnWin="畫圖"$saveWin="保存為"$imgFilePathStringReplace(GetConfigFile(),"scripts\ConfigParameter.ini",$imgFile)IfWinWait($picWin,"",10)ThenWinActivate($picWin)Send("人v")IfWinActivate($warnWin)ThenControlClick($warnWin,"","Button1")WinMenuSelectItem($picWin,"","文件保存")IfWinWait($saveWin,"",5)ThenWinActivate($saveWin)ControlSetText($saveWin,"","Edit1",$imgFilePath)"JPEGControlCommand($saveWin,"","ComboBox3","SelectString","JPEG(*.JPG;*.JPEG;*.JPE;*.JFIF)")ControlClick($saveWin,"","Button2")IfWinWait($saveWin,"已存在",5)ThenControlClick($saveWin,"已存在","Button1")EndIfEndIfWinWait($imgFile)IfWinExists($imgFile)ThenWinClose($imgFile)EndIfEndFunc;判斷窗口;$win窗口名稱;返回值如果找存在返回1,否則返回0FuncChkProgram($win)Dim$ret$ret=-1IfWinExists($win)Then$ret=1Else$ret=0EndlfReturn$retEndFunc;判斷程序進(jìn)程;$process進(jìn)程名稱;返回值如果找存在返回1,否則返回0FuncChkService($process)Dim$ret$ret=-1$flag=ProcessExists($process)If$flag=0Then$ret=0Else$ret=1EndIfReturn$retEndFunc;根據(jù)給定的字符串匹配ListBox控件中的數(shù)據(jù);$title窗口標(biāo)題;$listBoxCmpListBox控件;$matchStr匹配字符串.如果字符串以"&&"連接,則匹配所有,如果字符串以"||"連接則匹配部分返回值如果找到匹配的字符串返回1,否則返回0FuncMatchListBox($title,$listBoxCmp,$matchStr)Dim$ret,$count$ret=0$num=0$flag=1WinActivate($title)IfStringlnStr($matchStr,'||')>0Then$array=StringSplit($matchStr,'||',1)$flag=0Else$array=StringSplit($matchStr,'&&',1)Endlf$hWnd=ControlGetHandle($title,"",$listBoxCmp)$count=_GUICtrlListBox_GetCount($hWnd)For$i=0To$count-1$hLabel=_GUICtrlListBox_GetText($hWnd,$i)IfMatchStrArray($hLabel,$array)Then$num=$num+1If$flagThenIf$num=$array[O]Then$ret=1ExitLoopEndIfElse$ret=1ExitLoopEndIfEndIfNextReturn$retEndFunc;匹配ListView控件字符串;$title窗口標(biāo)題;$listViewCmpListView控件;$cols要查找的列,從0開始;$matchStr匹配字符串返回值如果找到匹配的字符串返回1,否則返回0FuncMatchListView($title,$listViewCmp,$cols,$matchStr)Dim$ret,$count,$rows$ret=0WinActivate($title)$rows=ControlListView($Title,"",$listViewCmp,"GetItemCount")$count=0For$i=0To$rows-1$iText=ControlListView($Title,"",$listViewCmp,"GetText",$i,$cols)IfStringInStr($iText,$matchStr)>0Then$count=$count+1EndIfNextIf$count=$rowsThen$ret=1Return$retEndFunc;匹配日志文件字符串;$logFile日志文件;$matchStr匹配字符串.如果字符串以"&&"連接,則匹配所有,如果字符串以"||"連接則匹配部分返回值如果找到匹配的字符串返回1,否則返回0FuncMatchLogFile($logFile,$matchStr)Dim$line,$array,$result,$count,$flag$result=0$count=0$flag=1IfStringlnStr($matchStr,'||')>0Then$array=StringSplit($matchStr,'||',1)$flag=OElse$array=StringSplit($matchStr,'&&',1)Endlf$file=FileOpen($logFile,0)if$file=-1ThenReturn-1EndIfWhile1$line=FileReadLine($file)If@error=-1ThenExitLoopEndIfIfMatchStrArray($line,$array)Then$count=$count+1If$flagThenIf$count=$array[0]Then$result=1ExitLoopEndIfElse$result=1ExitLoopEndlfEndIfWendFileClose($file)Return$resultEndFunc;匹配子字符串是否存在;$str目標(biāo)字符串;$arr匹配字符串;返回值如果找到匹配的字符串返回1,否則返回0FuncMatchStrArray($str,$arr)$flag=0For$i=1To$arr[0]IfStringinStr($str,$arr[$i])>0Then$flag=1ExitLoopEndIfNextReturn$flagEndFunc上面實(shí)例函數(shù)用到了Autolt內(nèi)部函數(shù)庫,通過#include關(guān)鍵字包含了進(jìn)來。14.Windows鎖屏處理辦法鎖屏解釋:1、當(dāng)windows操作系統(tǒng)被鎖屏?xí)r,實(shí)際上是在所有窗口(包括隱藏的)的前面再新開了一個窗口,完全遮擋住先前的窗口,這樣大家就看不到了,autoit說這個窗口叫"AlwaysonTOP”2、被遮擋的窗口雖然看不到了,但是還在,只是變成了隱藏模式,找到他們,是可以執(zhí)行快捷方式命令的;但窗口界面操作是不行的,主要原因是沒法激活Send和ControlSend命令Send命令必須要在激活窗口的條件下才能正確執(zhí)行ControlSend命令可以不需要激活窗口就能執(zhí)行****15?s31、-」40]>M^油坦s孚茨瞬磬#inc-udeAinc.au3v#inc-udeAguiclnp.au3vM}籀MfflDimsyyyylndLsyyyylnd2、syyyylnd3、sf-ag、sret跖艱啣3?sf-agHoSretHo勞iniw棄召、sprogramparhnIniRead(GetconfigH一eosHQZR-':programpa<-h5JsshowDataFi-enIniRead(GetconfigFi-e()、=HQZR':showDataFi-e=、JshqDataFi-enIniRead(GetconfigFi-e()、=HQZR':hqDataFi-e=、JSXXDataFi-enIniRead(GetconfigFi-e()、=HQZR':XXDataFi-e=、J誌油JudgeTime因磐脣冊味瑪母畫吻坦920亙w?Io建訕離騎迤臂、m坦920whi-eJudgeTimeoAOs-eep(loooo)WEnd;獲取文件的修改時間,并按照一定的格式組合$d1=FileGetTime($showDataFile,0)$yyyymd1=$d1[0]&$d1[1]&$d1[2]$d2=FileGetTime($hqDataFile,0)$yyyymd2=$d2[0]&$d2[1]&$d2[2]$d3=FileGetTime($xxDataFile,0)$yyyymd3=$d3[0]&$d3[1]&$d3[2];將組合的日期格式代入函數(shù)MathDate中,判斷其是否是當(dāng)前日期;這里有三個文件的判斷,都需要成立IfMathDate($yyyymd1)=1AndMathDate($yyyymd2)=1AndMathDate($yyyymd3)=1Then$flag=1EndIf;根據(jù)給定的路徑,啟動程序Run($programPath);等待程序啟動,并出現(xiàn)窗口WinWait($hqzrWinTitle,"",$WaitWinTime)翳冢Ihgffl冊絵冊昌如朝蹂口口冊絵冊S骰的粵昭故4IPULU(=瞅砸伺皿<擦?上=0=日①u_」pllos)60-l①七」Mr<DElu_M」zb5¥SOQWM①S_LU(=日宦伺皿<3a__lhr二=日①u_」pllos)60-l①七」Mu①一u:一①」Spu<:694s41世曬啦?啟<即總儀r圧、檢國60」①七」m旺颶膽瞬、4IPULU4IPULU(ooond①①一S:一①」Ssi、書<—I嘗蠱ft、0矍啊S4①一>^2rD①xLU」zb5==①一芒u_M」zbqs)>p=po」lucofflffiJ條£□?曙(①一芒u_M」zbqs)2e>t;vu_M□an-u①lut—IH6P541u①LU(①一芒u_M」zbqs)HSxUJu_M七田社冏毆口?*?當(dāng)魂**二、運(yùn)行程序或打開文件1、運(yùn)行程序Runt命令或者函數(shù)用來運(yùn)行外部可執(zhí)行文件,AHK還可利用它來直接打開文件。AHK:Run,目標(biāo)文件[,工作目錄,Max|Min|Hide|UseErrorLevel,輸出PID變量]AU3:Run("文件名"[,"工作目錄"[,標(biāo)志]])【示例2.1.1】AHK:Run,Notepad.exeAU3:Run("Notepad.exe")上面的示例中都沒有給出程序“Notepad.exe”的路徑,為什么仍能執(zhí)行?這是因?yàn)樗鼈兌紩詣釉谀_本所在目錄下搜尋目標(biāo)文件,如有則運(yùn)行,否則就到系統(tǒng)文件夾(%PATH%)中搜尋。注意:A)某些程序必須給定"工作目錄"才能成功運(yùn)行!B)給出完整的文件路徑有助于輕微提高程序的可靠性。C)AHK的Run命令可以用來運(yùn)行程序和直接打開文件,而AU3的Run函數(shù)則只能用來運(yùn)行程序(可執(zhí)行文件)或傳遞參數(shù)讓某個程序打開目標(biāo)文件。當(dāng)然,運(yùn)行程序的功能還不僅僅是這么簡單,我們還可以指定運(yùn)行程序的初始狀態(tài),比如讓運(yùn)行的記事本窗口以最大化狀態(tài)顯示(或者最小化、隱藏):【示例2.1.2】AHK:Run,Notepad.exe,,MaxAU3:Run("Notepad.exe","",@SW_MAXIMIZE)2、打開文件前面已經(jīng)提到,AHK的Run命令可以直接打開文件,而AU3的Run函數(shù)則只能用來運(yùn)行程序,因此在打開文件的方式上有點(diǎn)不同:AHK腳本中可直接給出目標(biāo)文件,而AHK將自動運(yùn)行該文件的關(guān)聯(lián)程序來打開它;而AU3則必須由用戶自己傳遞參數(shù)讓某個程序打開目標(biāo)文件。【示例2.2.1】AHK:Run,MyFile.txtRun,Notepad.exeMyFile.txtAU3:Run("Notepad.exeMyFile.txt")3、以命令行形式運(yùn)行程序可以考慮運(yùn)行系統(tǒng)的命令行解釋器(cmd.exe/),然后指定要執(zhí)行的命令并傳遞參數(shù)。假設(shè)我們要執(zhí)行命令“dirC:\WINDOWS\system32”,用以列出指定目錄的所有文件及子目錄。【示例2.3.1】AHK:Run,%ComSpec%/kdirC:\WINDOWS\system32AU3:Run(@ComSpec&"/kdirC:\WINDOWS\system32")注意:ComSpec是腳本內(nèi)建的用以指示命令行解釋器位置的變量或宏。/k參數(shù)表示“執(zhí)行字符串指定的命令但保留”,若改為/c則表示“執(zhí)行字符串指定的命令然后終斷”。對此比較直觀的解釋是/k將在執(zhí)行完命令后保留命令提示窗口,而/c則將在執(zhí)行完命令之后關(guān)閉命令提示窗口。C)符號“&”是AU3定義的字符串連接符。4、特殊應(yīng)用A)打開網(wǎng)頁【示例2.4.1】AHK:Run,/r/Run,%A_ProgramFiles%\InternetExplorer\IEXPLORE.EXE/r/AU3:Run(@ProgramFilesDir&"\InternetExplorer\IEXPLORE.EXE")B)打開特殊文件夾系統(tǒng)的某些特殊文件夾被定義了相應(yīng)的CLSID(請查看幫助文檔),我們可利用它來打開相應(yīng)的文件夾,比如打開回收站:【示例2.4.2】AHK:Run::{645ff040-5081-101b-9f08-00aa002f954e}AU3:不適用!C)運(yùn)行控制面板工具微軟已經(jīng)為我們提供了通過命令行打開控制面板某個工具或項(xiàng)目的方式,比如打開系統(tǒng)屬性窗口:【示例2.4.3】AHK:Runcontrolsysdm.cplAU3:Run("controlsysdm.cpl")關(guān)于訪問控制面板項(xiàng)目的詳細(xì)介紹請查看此文:文章地址。指定搜索位置并打開搜索窗口假設(shè)我們要打開一個搜索窗口,而且要指定搜索位置,比如C:\:【示例2.4.4】AHK:Run,findC:\AU3:不適用!顯示指定文件的屬性窗口假設(shè)我們要打開文件“MyFile.txt”的屬性窗口,則使用關(guān)鍵字properties然后接上目標(biāo)文件即可:【示例2.4.5】AHK:Run,propertiesMyFile.txtAU3:不適用!注意:AHK在退出前將自動關(guān)閉打開的屬性窗口!F)用“資源管理器”打開指定文件夾我們知道使用Run,explorerC:或Run("explorerC:")即可打開指定的文件夾,可是有時候我們需要在資源管理器中打開它,這時可使用關(guān)鍵字explore:【示例2.4.6】AHK:Run,exploreC:AU3:run("explorer.exe/e,C:\")G)打印指定文件要打印指定文件,可使用關(guān)鍵字print:【示例2.4.7】AHK:Run,printMyFile.txtAU3:不適用!F)用“資源管理器”打開指定文件夾我們知道使用Run,explorerC:或Run("explorerC:")即可打開指定的文件夾,可是有時候我們需要在資源管理器中打開它,這時可使用關(guān)鍵字explore:示例2.4.6】AHK:Run,exploreC:AU3:不適用!run("explorer.exe/e,d:\")這樣就可以做到你說的打開樹狀文件了注意:窗口標(biāo)題和窗口文本參數(shù)總是對大小寫敏感的。1、等待窗口系列命令/函數(shù)AHK和口AU3都提供了用法類似的一組窗口等待命令/函數(shù):WinWait/WinWaitActive/WinWaitClose它們分別用于等待窗口出現(xiàn)、等待窗口被激活、等待窗口被關(guān)閉。由于這些命令/函數(shù)的參數(shù)類似,現(xiàn)僅以WinWait為例說明。AHK:WinWait[,窗口標(biāo)題,窗口文本,超時時間,排除標(biāo)題,排除文本]AU3:WinWait("窗口標(biāo)題"[,"窗口文本"[,超時時間]])WinWait的作用是在目標(biāo)窗口出現(xiàn)之前不再執(zhí)行后面的所有語句。假設(shè)我們要運(yùn)行記事本程序,并在其窗口出現(xiàn)時提示用戶:示例3.1.1】AHK:RunNotepadWinWait,無標(biāo)題-記事本MsgBox記事本窗口已被打開!AU3:Run("Notepad")WinWait("無標(biāo)題-記事本")MsgBox(0,"","記事本窗口已被打開!")2、激活窗口相關(guān)命令/函數(shù)讓目標(biāo)窗口成為活動窗口的辦法就是激活它,可用的命令/函數(shù)是WinActivate:AHK:WinActivate[,窗口標(biāo)題,窗口文本,排除標(biāo)題,排除文本]AU3:WinActivate("窗口標(biāo)題"[,"窗口文本"])3、關(guān)閉窗口關(guān)閉窗口有兩種方式,一種是正常的關(guān)閉窗口(WinClose),另一種則是強(qiáng)行關(guān)閉窗口(WinKill):AHK:WinClose/WinKill[,窗口標(biāo)題,窗口文本,超時時間,,排除標(biāo)題,排除文本]AU3:winc_ose/winKi=(爾口茹冏二=8}口總料」)皆畝曲亠izjcll腎凹左將皆—->莊煤酈4BSS惡7、bsd曲亠一〕凹、ani噩MM、???4S3壽來SM-【書312】AHK-Run、sysdm.cp-WinWaiLWinActivate、^SFWH?winwairActivp^SFWH?s-eep、3000wincose洲為1DSwinwaitcosp洲SFWH?AU3-Run(nontro_sysdm.cp=)WinWait(鴻為WH?-)winACc+vate(_?iSFJS1r)winwai(Acrive(=洲浮WH?-)s_eep(3000)wincose(=^$wlr)WinWaitC-ose(_?i^wH?=)建議:如果程序中頻繁地出現(xiàn)要用到這些窗口標(biāo)題的地方,會帶來一個問題:腳本的可讀性,也許你會想,這不是很直觀嗎?可問題是如果這個重復(fù)出現(xiàn)的窗口標(biāo)題是個很長的字符串呢?這將嚴(yán)重影響整個代碼的排版美觀。而且我們也無從了解這些窗口標(biāo)題的“來頭”,不知道這個窗口標(biāo)題究竟是怎么來的。而如果我們定義一個變量(假設(shè)變量名是“AppWindowl”)保存這個窗口標(biāo)題,我們就能在命令/函數(shù)中用變量來表示它,這樣就達(dá)到了讓代碼用意更清晰一點(diǎn)的目的。另外,就算目標(biāo)軟件因某些原因(比如升級)而改變了它的窗口標(biāo)題,我們也能很方便地作出修改。4、更準(zhǔn)確的標(biāo)識窗口的方法(主要針對AHK腳本)程序在運(yùn)行時起碼會有一個進(jìn)程,如果能獲得這個進(jìn)程ID就能在一定程度上保證對窗口的準(zhǔn)確標(biāo)識。另外,每個窗口都有定義窗口類名(Class,比如說記事本窗口的類名就是Notepad),所以我們可以以此排除與目標(biāo)窗口不同的其它窗口類。其實(shí),我們還有一個更準(zhǔn)確的方法:每個窗口(包括控件在內(nèi))都被Windows指派了一個可區(qū)別于其它窗口的唯一的標(biāo)識符(ID),我們稱之為窗口句柄(HWND)直接給定窗口標(biāo)題來表示窗口的一個缺點(diǎn)就是無法保證在腳本運(yùn)行的過程中始終以該窗口為操作目標(biāo),因?yàn)樵谶@個過程中很有可能會有其它“同名”窗口(或者說滿足匹配條件的窗口)出現(xiàn),而如果我們使用這個標(biāo)識符來表示窗口自然就能保證命令/函數(shù)的操作窗口總是同一個窗口了。我們先來了解一下獲得窗口句柄的命令/函數(shù):AHK:WinGet[,輸出變量,ID,窗口標(biāo)題,窗口文本,排除標(biāo)題,排除文本]AU3:WinGetHandle("窗口標(biāo)題"[,"窗口文本"])其中WinGet獲得的窗口ID將通過"輸出變量"返回,而WinGetHandle的返回值就是獲得的窗口ID。我們在進(jìn)行自動化操作時是要先運(yùn)行某個程序,如何獲得這個程序成功運(yùn)行后顯示的窗口句柄?一個比較保險的辦法是先獲得這個程序的進(jìn)程ID,然后根據(jù)這個進(jìn)程ID獲得它的窗口句柄,AHK支持使用進(jìn)程ID作為窗口標(biāo)題使用;但AU3不支持這樣使用,只能先獲得該窗口的類名再根據(jù)該類名來獲得窗口句柄(不夠保險):【示例3.1.3】AHK:Run,NotePad,,,ThisPIDWinWait,ahk_pid%ThisPID%;這里的ahk_pid表明跟在后面的變量是進(jìn)程IDWinGet,ThisID,ID,ahk_pid%ThisPID%;ThisID將保存獲得的窗口句柄AU3:Opt("WinTitleMatchMode",4)Run("Notepad")$handle=WinGetHandle("classname=Notepad")現(xiàn)在暫且先忘記了AU3吧,因?yàn)樗拇翱诤瘮?shù)一般都不支持使用窗口句柄作為(窗口標(biāo)題)參數(shù)。至于如何在AHK中使用窗口句柄,簡單的說,凡是有“窗口標(biāo)題”參數(shù)的命令就可以用窗口句柄來代替,比如:【示例3.1.4】AHK:Run,Notepad,,,ThisPID;先獲得運(yùn)行的記事本程序的進(jìn)程IDWinWait,無標(biāo)題-記事本ahk_pid%ThisPID%;等待該進(jìn)程窗口的出現(xiàn)WinGet,ThisHWND,ID,無標(biāo)題-記事本ahk_pid%ThisPID%;獲得窗口句柄WinActivate,ahk_id%ThisHWND%;這里的ahk_id表明跟在后面的變量是窗口句柄WinWaitActive,ahk_id%ThisHWND%/
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業(yè)自動化中的機(jī)器人技術(shù)探討
- 工業(yè)自動化技術(shù)與應(yīng)用領(lǐng)域探討
- 工業(yè)自動化技術(shù)的未來趨勢分析
- 工業(yè)設(shè)計與品牌建設(shè)的策略
- 工業(yè)設(shè)計與產(chǎn)品設(shè)計思路分享
- 工作中的溝通技巧與效率關(guān)系
- 工作中的創(chuàng)新方法與實(shí)踐案例分享
- 工作與生活平衡的實(shí)踐方法
- 工程機(jī)械設(shè)備行業(yè)發(fā)展現(xiàn)狀與趨勢
- 工廠節(jié)能減排技術(shù)推廣
- 團(tuán)隊建設(shè)(完整版)-HR貓貓復(fù)習(xí)課程
- 五年級讀書分享課件
- 倉庫管理基礎(chǔ)知識培訓(xùn)
- 自閉癥孤獨(dú)癥兒童語言與溝通評估表
- 鋼網(wǎng)架結(jié)構(gòu)安裝、拼裝施工方案
- DB32989-2007低壓電氣裝置規(guī)程
- 部編版六年級下冊道德與法治知識點(diǎn)大匯總
- T∕CSTE 0008-2020 污水處理用碳源液體乙酸鈉
- Q∕GDW 46 10022.9-2020 主進(jìn)水閥本體運(yùn)檢導(dǎo)則
- 電網(wǎng)公司竣工決算報告編制規(guī)范與竣工決算資料的要求
- 城市主干道工程監(jiān)理大綱
評論
0/150
提交評論