目錄
1. AU3是什麼?能作什麼?
2. 亂學AU3中的命令(語言相關)?
3. 經過簡單示例學習AU3?
4. 正則表達式的學習(對大小寫敏感)
5.對於GUI的相關學習
1. AU3是什麼?能作什麼?
答:AU3是一個相似BASIC的免費腳本語言;AU3能進行GUI操做、能模擬鍵盤/鼠標事件、能對窗口及窗口中的標準控件進行互動操做(如窗口移動、控件響應等)、能直接調用外部DLL和WINAPI、支持COM和正則表達式、擁有大量功能函數、支持主流Microsoft OS、可編譯成EXE獨立運行。
2. 亂學AU3中的命令(語言相關)?
AU3的數據類型是Variant,能夠是數值型、字符型或布爾型等。
窗口句柄(HWnd)是一個指針類型數據;
變量:理解成在內存中的某區域指針,能夠根據這個指針對該內存區域進行讀和寫數據。$是變量的前綴,能夠是字母、數字和_下劃線的混合。
常量:可由Const關鍵字定義和Enum關鍵字枚舉。用Enum枚舉常量時,默認值爲0,以後常量進行加1或指定步長操做,例Enum step +3 $Const1,$Const2,$Const3,則它們對應的值分別是0,3,6,當使用步進進行倍乘運算時,第1個常量必須是1,其他的倍乘於早先的常量,例Enum step *3 $Const1,$Const2,$Const3,則它們對應的值分別是1,3,9.
Enum $const1=1,$const2,$const3
MsgBox(0,"",$const1 & ":" &$const2 & ":" & $const3) ;1 2 3
Enum Step 2 $incr0,$incr2,$incr4
MsgBox(0,"",$incr0 & ":" &$incr2 & ":" & $incr4) ;0 2 4
Enum Step *2 $mult1,$mult2,$mult4
MsgBox(0,"",$mult1 & ":" &$mult2 & ":" & $mult4) ;1 2 4
數組:使用前必須用Dim定義它的維數。一個數組包含的數據類型能夠不止一種,但儘可能只包含一種,不然嚴重影響腳本運行速度。數組能夠做爲參數傳遞給函數,但必須使用ByRef。
宏:AU3定義的宏是隻讀的變量,以@爲前綴。
% :是 字符串的前綴。
_ :空格 加上_即 _是「續行」的意思,就是一條語句能夠在多行內書寫。
註釋符號:簡短內容用 ; 分號註釋,長篇大論用 #comments-start … #comments-end(縮寫爲#cs … #ce)註釋,注意後者本身不能對本身進行註釋。
#include :包含文件到腳本,語法 #include 「[path\]文件名」 或#include <文件名>,前一個文件名是用戶定義的,後一個是AU3自帶的庫文件。執行時它們的搜索順序不一樣。文件名只能是字符串不能是變量。
#include-once :若是某腳本被另外一個腳本屢次包含,別忘了在該腳本上使用該該關鍵字。
#NoTrayIcon :執行時不顯示托盤圖標。
Opt(「TrayIconHide」,1) :執行時顯示托盤圖標再隱藏;Opt(「TrayIconHide」,0) 顯示托盤。
#OnAutoitStartRegister 「函數」 :註冊AU3啓動時調用的函數。
#NoAutoit3Execute :指定當前編譯的腳本不能運行 /Autoit3ExecuteLine或 /Autoit3ExecuteScript參數運行。
#RequireAdmin :當前運行的腳本須要完整的管理員權限。
AutoitSetOption(「MustDeclareVars」,1) :變量使用前必須先聲明。
ContinueLoop :繼續While/Do/For循環,
例:For $i = 1 to 10
If $i = 7 Then ContinueLoop
MsgBox(0, "$i 的當前值爲:", $i)
Next ;顯示除7以外的9個數字
@ComSpec 該宏執行命令解釋器的全路徑,例:RunWait(@ComSpec&」 /c dir c:\」),參數/c是在命令解釋器下執行後面的字符串命令「dir c:\」。
Run 運行可單獨執行的命令,例:Run(「notepad」),exe、bat、com、pif直接運行的文件由Run執行,諸如.txt、.msi文件不能單獨執行,他們都是依靠其餘程序執行,如.msi依靠msiexec.exe執行,所以Run(「msiexec example.msi」),也能夠ShellExecCute(「example.msi」)。
StringFormat() 將多個變量插入到某個字符串中,例:
Local $var1=1,$var2=2,$var3=3,$var4=4,$var5=5
$msg = StringFormat("變量1是 %s, 變量2是 %s, 變量3是 %s, V變量4是 %s, 變量5是 %s", $var1, $var2, $var3, $var4, $var5)
MsgBox(0, "示例", $msg),注意字符串前必須有 % 。@是宏前綴,$是變量前綴,%是字符串前綴。
Send() 如用 Send發送帶特殊符號的變量的內容,如!^+{SPACE},使用send的原文模式發送,例:DIM $Var=」!zgk」 Send($Var,1),其flag爲 1表示按原文模式發送。
#AutoIt3Wrapper_Icon=自定義一個圖標 編譯時可以使用該語句自定義一個圖標。
$CmdLine[] 當AU3接收命令行參數時會初始化一個特殊的數組就是$CmdLine[],$CmdLine[0] 表示接收的命令行參數的個數,$CmdLine[1]表示第1個接收的參數。
$CmdLineRaw 表示一個完整的未被拆分的語句,例:Autoit3.exe example.au3 參數1 「其餘內」,那麼$CmdLineRaw會返回:example.au3參數1 「其餘內」,編譯後,$CmdLineRaw會返回: 參數1 「其餘內」 ,注意example.au3沒有返回。
#requireadmin :腳本默認執行權限是標準用戶,如需管理員權限使用該語句。
@ScriptName :表明腳本的文件名。
HWND 表示控件句柄,由ControlGetHandle()函數肯定。對控件能夠進行多種操做,如ControlSend("無標題 - 記事本", "", "[CLASS:Edit; INSTANCE:1]", "這是測試文本") ;ControlClick("個人窗口", "", 254);ControlSetText("個人窗口", "", "[NAME:textBoxFolder]", "C:\Some\Folder")。
Exit[返回值] :終止程序運行。[返回值]爲整數,0表示腳本正常退出,1表示腳本異常終止,如被任務管理器終止。可書寫爲Exit、Exit0或Exit(1),但Exit()是錯誤的。
ExitLoop [等級] :退出循環。[等級]默認值爲1,表示退出當前循環。
For <$變量> in <表達式> … Next :列出對象集合中的對象或數組中的元素。表達式能夠是對象集合或數組,變量無須定義,自動生成Local變量,以下例中的$Window。
例:
$oShell=ObjCreate(「shell.application」) ;定義對象
$oShellWindows=$oShell.windows ;定義對象集合
if IsObj($oShellWindows) then
$string=」」
for $Window in $oShellWindows
$string=$string & $Window.LocationName & @crlf
Next
Msgbox(0,」」,」你打開了下列窗口: 「&@crlf & $string)
Else
Msgbox(0,」」,」你沒有打開任何窗口」)
Endif
Func 函數名 … EndFunc :用戶自定義函數。經過「返回值」和 @error 來判斷函數是否執行成功,以 @error 爲優先
判斷。
3. 經過簡單示例學習AU3?
例1:新創建一文本文件並保存指定內容?
代碼以下:
Send("#r") ;# 表示Windows徽標,即發送 Win+R
WinWaitActive("運行") ;等待擊活‘運行’窗口
Send("notepad.exe{Enter}") ;在‘運行’窗口輸入notepad.exe並按回車
WinWaitActive("無標題 - 記事本") ;等待擊活‘運行無標題 - 記事本’窗口
Send("這裏是經過WIN+R打開運行窗口,再自動輸入notepad.exe後,在打開記事本程序自動輸入指定內容後保存並退出 {F5}")
;向打開的記事本輸入內容
WinClose("無標題 - 記事本")
WinWaitActive("記事本")
Send("!Y")
WinWaitActive("另存爲","保存在(&I):")
;ControlClick("另存爲","保存在(&I):",1137)
ControlClick("另存爲","保存在(&I):","ComboBox1")
ControlSetText("另存爲","保存在(&I):","ComboBox1","c:\")
ControlClick("另存爲","保存在(&I):","ComboBox1")
;ControlClick("另存爲","保存在(&I):",1137)
ControlSetText("另存爲","保存在(&I):","Edit1","testautonotepad222.txt")
Send("!S")
#cs
我想用ControlSetText("另存爲","保存在(&I):","ComboBox1","c:\")設置存儲路徑
用ControlSetText("另存爲","保存在(&I):","Edit1","testautonotepad1.txt")設置要創建的文件
但實際用 Send("c:\testautonotepad.txt !S")就搞定了!
不過ControlSetText("另存爲","保存在(&I):","ComboBox1","c:\")根本沒起做用?
在該語句先後都加上 ControlClick("另存爲","保存在(&I):","ComboBox1")就OK!
#ce
補充方法:
Local $FileName="c:\zgk.txt"
Local $FileContents="My name is zgk!Welcome to you!"
Local $Open=FileOpen($FileName,2) ;記住有2
FileWrite($Open,$FileContents)
FileClose($Open)
4. 正則表達式的學習(對大小寫敏感)
語法:StringRegExp( "字符串" , "表達式" [, 標誌 ] [, 偏移量 ]] )
就是在「字符串」中找到你但願能看到的「表達式」或者從「字符串」中返回你但願的 「值」。
[…]匹配其中的任何字符
例:MsgBox(0, "SRE 示例 2 結果", StringRegExp("text", 'te[sx]t'))
[^ ... ]不匹配其中的任何字符,若是要匹配^,用(\^)
"{匹配的數量}" 或指定一個範圍 "{最小,最大}".
例;MsgBox(0, "SRE 示例 3 結果", StringRegExp("text", 't{1}e{1}[sx]{1}t{1}'))
()分組,此時的標誌 爲 1,不只能返回匹配的結果,還能將「分組」的 字符以數組形式返回
例:$asResult = StringRegExp("This is a test example", '(test)', 1)
If @error == 0 Then
MsgBox(0, "SRE 示例 4 結果", $asResult[0])
EndIf
$asResult = StringRegExp("This is a test example", '(te)(st)', 1)
; (te)(st)分2個組,但它們必須是「連續」的字符
;紅色的1表示僅返回第一個匹配的結果
If @error == 0 Then
MsgBox(0, "SRE 示例 4 結果", $asResult[0] & "," & $asResult[1])
;分別返回第1個分組字符$asResult[0]和第2個分組字符$asResult[1]
EndIf
例:$Str = "You deflect 36 of Gnarly 25Monster's 279 damage 379 damage"
$sR = StringRegExp($Str, '([0-9]{1,3})(?: damage)', 3)
;紅色的3表示返回全部匹配的結果
;$sR = StringRegExp($Str, '(\d+)\h+damage', 3)
If Not @Error Then MsgBox(0, 'SRE 示例 6 結果', $sR[0] & ',' & $sR[1])
5.對於GUI的相關學習
對於GUI操做必須使用庫文件 #include <GUIConstantsEx.au3>
GUI響應事件有2種模式:消息循環(MessageLoop)和事件模式(OnEvent),默認是MessageLoop,可經過Opt(「GuiOnEventMode」,1)更改成OnEventMode。
MessageLoop模式 :當以GUI操做爲第一要務時,建議用該模式,該模式下是經過GUIGetMsg()函數不斷返回消息事件來響應,該函數返回的事件類型是「無事件、控件事件(如用GUICtrlCreateButton建立的控件響應的事件)、系統事件(如$GUI_EVENT_CLOSE、$GUI_EVENT_MINIMIZE等)。
GUIGetMsg()函數還能夠在多窗口中操做,由於不管多少窗口它的ID是惟一的,此時可使用GUIGetMsg(1),這裏的1不只表明被截獲的各個事件(它們都存儲於$array[0]中),還包括各個窗口的ID(他們都存儲於$array[1]中)。
MessageLoop基本語法框架:
While 1
$nMsg=GUIGetMsg()
…具體代碼
Wend
例:建立2個窗口,用GUIGetMsg(1)來操做
#include <GUIConstantsEx.au3>
;建立第1個窗口
$FirstWindow=GUICreate("第1個窗口",200,200,-1,-1)
GUICtrlCreateLabel("第一個窗口的LABEL: ",10,10,150,20)
$Button1=GUICtrlCreateButton("肯定",10,30,50,20)
;建立第2個窗口
$SecondWindow=GUICreate("第2個窗口",200,200,-1,-1)
GUISwitch($FirstWindow) ;切換哪一個窗口使用 GUI函數,本例將$FirstWindow設置爲當前窗口進行各類操做GUISetState(@SW_SHOW) ;能夠用GUISetState(@SW_SHOW,$FirstWindow)代替GUISwitch($FirstWindow)
While 1
Local $nMsgs=GUIGetMsg(1)
Select
Case $nMsgs[0]=$Button1
MsgBox(0,"選擇的是第1個窗口的按鈕","你按了「肯定」按鈕")
Case $nMsgs[0]=$gui_event_close And $nMsgs[1]=$FirstWindow
MsgBox(0,"第1窗口操做","你選擇了關閉窗口操做,正在關閉")
ExitLoop
EndSelect
Wend
OnEvent模式:只有在事件被觸發時才調用相關函數執行,執行後在返回主程序。返回的事件包括控件事件和系統事件,這2類事件發生時均調用用戶自定義的函數,系統事件調用的函數是GUISetOnEvent(),控件事件調用的是GUICtrlSetOnEvent()。
OnEvent模式基本語法框架:
While 1
Sleep(1000)
Wend
Func Ownfunc()
具體代碼
Endfunc
Func Ownfunc()
具體代碼
Endfunc
例:
#include <GUIConstantsEx.au3>
;Opt("GUIONEVENTMODE",1)
Opt("GUIOnEventMode", 1) ; 切換爲 OnEvent 模式
$FirstWindow=GUICreate("普通事件模式窗口調試",200,200,-1,-1)
GUISetOnEvent($GUI_EVENT_CLOSE,"CloseWindow")
GUICtrlCreateLabel("你好,OnEvent Mode: ",10,10)
$Button=GUICtrlCreateButton("OK!",20,30)
GUICtrlSetOnEvent($Button,"ClickOk")
$DummyWindow=GUICreate("虛擬窗口,不會被顯示",200,200,-1,-1)
GUISetOnEvent($GUI_EVENT_CLOSE,"CloseWindow")
GUISetState(@SW_SHOW,$FirstWindow)
While 1
Sleep(1000) ; 不作任何事
Wend
Func ClickOk()
MsgBox(0,"OK!按鈕","你點擊了OK!按鈕")
EndFunc
Func CloseWindow()
;注意: 此時 @GUI_CTRLID 的值將等於 $GUI_EVENT_CLOSE,
;而 @GUI_WINHANDLE 則等於 $FirstWindow
If @GUI_WinHandle=$FirstWindow Then
MsgBox(0, "窗口事件", "您選擇了關閉!正在退出...")
Exit
EndIf
EndFunc
AU3學習筆記php
[b]回覆 [url=http://www.autoitx.com/redirect.php?goto=findpost&pid=196303&ptid=17702]1#[/url] [i]newuser[/i] [/b]
Zougk 2010-6-9從新學習基礎知識
目錄
一.基礎部分
1.variables(變量)、constants(常量)、arrays(數組)、字符串變量與變量轉換
2.#include和fileinstall()
3.消息循環模式和事件模式
4.函數(跳過)
5.條件與循環語句
6.程序運行爲功能(CrossDoor)
7.函數的參數傳遞
8.函數的嵌套與遞歸
9.正則表達式(必需要理解啊!!!)
10.註冊表操做
11.文件讀寫(包括對二進制文件內容的替換)
二.進階部分
1.GUI操做示例講解
2.AU3中的DLL應用
一.基礎部分
1
Variables
在AU3中,變量使用前是否必須聲明,沒有嚴格限制,但若是強制變量聲明,使用Opt("MustDeclareVars",1)。建議在用DEBUG代碼時,必須顯示聲明全部變量,以方便調試程序,其實我根本就不會DEBUG,呵呵!
變量前綴必須是$,名稱部分可由數字、字母和下劃線 _ 組成,如$My_variable。
定義變量的關鍵字分別是Dim、Local、Global,注意它們所定義的變量範圍。
例:Global定義的變量與函數內Dim定義的變量重名時,Glbal定義的變量將被複寫
Global $FILE=@SCRIPTDIR & "\win7book.exe"
FUNCTION()
FUNC FUNCTION()
DIM $FILE=@ScriptDir & "\Exe2AutV3.exe"
EndFunc
RUN($FILE) ; 最終腳本執行的是Dim定義的變量
若是改爲:
Global $FILE=@SCRIPTDIR & "\win7book.exe"
DIM $FILE=@ScriptDir & "\Exe2AutV3.exe"
RUN($FILE) ; 最終腳本執行的仍是Dim定義的變量
將Global更改爲Local,結果依舊。
增強理解:Global定義的變量是全局變量,在整個程序內都有效,若是在函數內有同名的變量且值被修改,那麼Global定義的變量天然會發生變化。若是是局部變量,只是在本身負責的範圍內有影響,而無論外部是否有與其通明的變量。
數組
AU3中,數組是存儲一組相同類型或不一樣類型的數。經過下標來訪問數組中的元素。
例:$Day能夠是0-6中任意1個
Dim $Week[7]=["星期一","星期二","星期三","星期四","星期五","星期六","星期日"] ;定義一個一維的7個元素的數組來存儲一週的每一天
Dim $Day=2;這個變量表示咱們要查看哪一個數組元素
If $Day > 6 Then $Day = 6
If $Day < 0 Then $Day = 0 ;以上2個if語句來判斷$Day變量的大小是否超出數組
MsgBox(0,"今天是?",$Week[$Day])
例:
Dim $Week[4][3]=[["週一","週二","週三"],["語文","數學","數學"],["英語","語文","體育"],["歷史","音樂","班會"]] ;定義一個二維數組
$Rows=UBound($Week,1) ;UBound ( 數組 [, 維度] ) 維度默認值爲 1,表示第一維.此例表示 行數
$Cols=UBound($Week,2) ;此例表示 列數
$Dims=UBound($Week,0) ;若此參數爲0,則返回數組的下標數(維數).
MsgBox(0,"當前"&$Dims&"維數組有",$Rows&" 行, "&$Cols&" 列")
例:二維數組的輸出不完善?
Dim $sMsg3
Dim $Week[4][3]=[["週一","週二","週三"],["語文","數學","數學"],["英語","語文","體育"],["歷史","音樂","班會"]]
ReDim $Week[5][3] ;上面是1天3節課,如今多加了1行,既天天增長了1節課
For $i=0 To 2
$Week[4][$i]="美術" ;由於行數是從0開始,新加的第5行下標天然就是[4],這裏表示加的課都是美術
Next
For $x=0 To 2
For $y=0 To 4
MsgBox(0,"",$Week[$y][$x]&@CRLF)
Next
Next
例:修正上例-感謝3mile
Dim $Week[4][3]=[["週一","週二","週三"],["語文","數學","數學"],["英語","語文","體育"],["歷史","音樂","班會"]]
ReDim $Week[5][3] ;上面是1天3節課,如今多加了1行,既天天增長了1節課
Local $str
For $i=0 To 2
$Week[4][$i]="美術" ;由於行數是從0開始,新加的第5行下標天然就是[4],這裏表示加的課都是美術
Next
For $i=0 To 4
For $n=0 To 2
$str&=$week[$i][$n]&@TAB
Next
$str&=@CRLF
Next
MsgBox(0,0,$str)
例:一樣是修正上例(行列互換就好多了)---感謝Kxing
Dim $Week[3][4]=[ _
["週一","語文","數學","數學"], _
["週二","英語","語文","體育"], _
["週三","歷史","音樂","班會"]]
For $i=0 To 2
MsgBox(0,$Week[$i][0],$Week[$i][1]&" - "&$Week[$i][2]&" - "&$Week[$i][3])
Next
字符串部分(向CroosDoor學習):
例:
Dim $Var1="'zougk"
Dim $Var2='"zougk'
MsgBox(0,"","first value is: "&$Var1&@CRLF&"second value is: "&$Var2)
Dim $Var3=$Var1&$Var2
MsgBox(0,"",$Var3)
StringLen(字符串) :該函數獲取的是「字符串的字符數而不是字節數」。
StringReplace(字符串,」被替換的字符」, 」用於替換的字符」,替換次數)
例:
Dim $var="love me for ever love"
MsgBox(0,"",StringReplace($var,"love","I love",1)) ;僅第一個love被替換成I love
StringSplit() :拆分字符串
例:
Dim $Var="中國人 韓國人 日本人,都是亞洲人"
$Split_Var=StringSplit($Var," ")
MsgBox(0,"","被拆分的字符串的數量是: "&$Split_Var[0]&";"&"它們依次是: "&$Split_Var[1]&" : "&$Split_Var[2]&" : "& _
$Split_Var[3])
;stringsplit()函數拆分紅功後,將產生1個數組,第1個元素存儲被拆分的字符串的數量,第2個元素是第一個被拆分的字符串,依次類推
$Split_Var1=StringSplit($Var,";")
MsgBox(0,"","被拆分的字符串的數量是: "&$Split_Var1[0]&";"&"它們依次是: "&$Split_Var1[1])
;stringsplit()函數拆分失敗後,也將產生1個數組,第1個元素是1,第2個元素存儲的是整個字符串
例:獲取指定文件的相關屬性(增強理解)
$Attrib=FileGetAttrib("F:\temp\卷C1.txt") ;獲取腳本目錄的文件夾屬性
;MsgBox(0,"文件的屬性分別有: ",$Attrib)
If @error Then
MsgBox(4096,"錯誤","沒法得到屬性")
Exit
EndIf
$Input=StringSplit("R,A,S,H,N,D,O,C,T",",")
$Output=StringSplit("只讀/,存檔/,系統/,隱藏/,普通/,目錄/,脫機/,壓縮/,臨時/",",")
;以上2個變量只是爲了在「替換字符串時將文件(夾)的英文屬性標識轉換成中文」
For $i=1 To 9
$Attrib=StringReplace($Attrib,$Input[$i],$Output[$i],0,1) ;stringreplace()中的1表示替換字符時區分大小寫
Next
$Attrib=StringTrimRight($Attrib,1) ;移除末尾的反斜槓
MsgBox(0,"完整的文件屬性: ",$Attrib)
變量轉換(由字符串轉換成其它類型變量)
轉換爲指針:
何謂指針:變量用來存儲數據,數據被存放在內存中,爲有效經過變量來訪問內存中的數據,對變量進行編號,那麼編號就是變量在內存中的地址,即這個編號就是指針。
何謂指針變量:就是存儲變量地址的變量。
轉換函數:Ptr(字符串)
轉換爲句柄:
一般指的是窗口句柄的轉換。窗口句柄是一個整數,AU3中用一個十六進制數來表示它。
轉換函數:HWND(字符串)。
例:句柄不能是字符串
窗口、控件、程序都有句柄
$hWnd=WinGetHandle("[class:Shell_TrayWnd]") ;獲取任務欄句並
WinSetState($hWnd,"",@SW_HIDE) ;使用任務欄句炳隱藏任務欄
Sleep(1000) ;隱藏1秒
WinSetState($hWnd,"",@SW_SHOW)
MsgBox(0,"","把句炳轉換成字符串後再進行以上操做")
$sWnd=String($hWnd)
WinSetState($sWnd,"",@SW_HIDE)
Sleep(1000)
WinSetState($sWnd,"",@SW_SHOW)
MsgBox(0,"","上面實驗失敗,說明句並不能是字符串,咱們再把字符串轉換成句柄試一下!")
$sWnd=HWnd($sWnd)
WinSetState($sWnd,"",@SW_HIDE)
Sleep(1000)
WinSetState($sWnd,"",@SW_SHOW) ;成功顯示
轉換爲整數:
轉換函數:Int(字符串)。
非數字字符串轉換成整數時都是0。
轉換爲二進制數據:
二進制數據就是字符串編碼。
轉換函數:StringToBinary()和BinaryToString()。
Constants
常量就是值不能被更改的變量,也不能把已經存在的變量更改爲常量。
常量經過Const定義,也可在Const前加Dim 、Local、 Global,例Const $Num=1 或
Dim Const $Num=1。
另外,常量也能夠經過Enum關鍵字枚舉,如不指定枚舉的默認值一般是0,但若是用倍乘的話,默認值必須是1。
例:
Enum $const1=1,$const2,$const3
MsgBox(0,"",$const1 & ":" &$const2 & ":" & $const3) ;自加1,結果是1 2 3
Enum Step 2 $incr0,$incr2,$incr4
MsgBox(0,"",$incr0 & ":" &$incr2 & ":" & $incr4) ;自加指定步長,結果是0 2 4
Enum Step *2 $mult1,$mult2,$mult4
MsgBox(0,"",$mult1 & ":" &$mult2 & ":" & $mult4) ;1 2 4
Arrays
數組就是數的矩陣,矩陣裏的元素應該是同類型和大小的,但在變體矩陣中,類型能夠多種多樣,但使用了變體數組尤爲是在數組中套用了變體數組,那麼在腳本執行過程當中將是很是消耗資源和運行緩慢,依次不推薦使用變體數組。反正我是用不上它!
數組能夠做爲參數傳遞給函數,但必須使用ByRef。
2
#inclued 和 fileinstall()
它們很相似,都是將指定的文件在腳本編譯的時候包含到被編譯的腳本中。但使用fileinstall()預裝須要包含的文件在編譯後會致使腳本的體積過大。
#include能夠將預先寫好的函數或現有常量包含到腳本中,例#include <array.au3>或 #include <buttonconstants.au3>。
fileinstall的語法:fileinstall(「sourcefilepath」,」destinationpath」[,flag]) ,其中flag但是0或1,0表示若是目的路徑下有相同文件不覆蓋,反之覆蓋。
3
消息循環模式
對於GUI操做必須使用庫文件 #include <GUIConstantsEx.au3>
GUI響應事件有2種模式:消息循環(MessageLoop)和事件模式(OnEvent),默認是MessageLoop,可經過Opt(「GuiOnEventMode」,1)更改成OnEventMode。
MessageLoop模式 :當以GUI操做爲第一要務時或GUI做爲主焦點(main focus),建議用該模式,該模式下是經過GUIGetMsg()函數不斷返回消息事件來響應,該函數返回的事件類型是「無事件、控件事件(如用GUICtrlCreateButton建立的控件響應的事件)、系統事件(如$GUI_EVENT_CLOSE、$GUI_EVENT_MINIMIZE等)。
GUIGetMsg()函數還能夠在多窗口中操做,由於不管多少窗口它的ID是惟一的,此時可使用GUIGetMsg(1),這裏的1不只表明被截獲的各個事件(它們都存儲於$array[0]中),還包括各個窗口的ID(他們都存儲於$array[1]中)。
MessageLoop基本語法框架:
While 1
$nMsg=GUIGetMsg()
…具體代碼
Wend
例:建立2個窗口,用GUIGetMsg(1)來操做
#include <GUIConstantsEx.au3>
;建立第1個窗口
$FirstWindow=GUICreate("第1個窗口",200,200,-1,-1)
GUICtrlCreateLabel("第一個窗口的LABEL: ",10,10,150,20)
$Button1=GUICtrlCreateButton("肯定",10,30,50,20)
;建立第2個窗口
$SecondWindow=GUICreate("第2個窗口",200,200,-1,-1)
GUISwitch($FirstWindow) ;切換哪一個窗口使用 GUI函數,本例將$FirstWindow設置爲當前窗口進行各類操做GUISetState(@SW_SHOW) ;能夠用GUISetState(@SW_SHOW,$FirstWindow)代替GUISwitch($FirstWindow)
While 1
Local $nMsgs=GUIGetMsg(1)
Select
Case $nMsgs[0]=$Button1
MsgBox(0,"選擇的是第1個窗口的按鈕","你按了「肯定」按鈕")
Case $nMsgs[0]=$gui_event_close And $nMsgs[1]=$FirstWindow
MsgBox(0,"第1窗口操做","你選擇了關閉窗口操做,正在關閉")
ExitLoop
EndSelect
Wend
OnEvent模式:只有在事件被觸發時才調用相關函數執行,執行後在返回主程序。返回的事件包括控件事件和系統事件,這2類事件發生時均調用用戶自定義的函數,系統事件調用的函數是GUISetOnEvent(),控件事件調用的是GUICtrlSetOnEvent()。
OnEvent模式基本語法框架:
While 1
Sleep(1000)
Wend
Func Ownfunc()
具體代碼
Endfunc
Func Ownfunc()
具體代碼
Endfunc
例:
#include <GUIConstantsEx.au3>
;Opt("GUIONEVENTMODE",1)
Opt("GUIOnEventMode", 1) ; 切換爲 OnEvent 模式
$FirstWindow=GUICreate("普通事件模式窗口調試",200,200,-1,-1)
GUISetOnEvent($GUI_EVENT_CLOSE,"CloseWindow")
GUICtrlCreateLabel("你好,OnEvent Mode: ",10,10)
$Button=GUICtrlCreateButton("OK!",20,30)
GUICtrlSetOnEvent($Button,"ClickOk") ;爲指定控件的點擊行爲定義函數ClickOk
$DummyWindow=GUICreate("虛擬窗口,不會被顯示",200,200,-1,-1)
GUISetOnEvent($GUI_EVENT_CLOSE,"CloseWindow")
GUISetState(@SW_SHOW,$FirstWindow)
While 1
Sleep(1000) ; 不作任何事
Wend
Func ClickOk()
MsgBox(0,"OK!按鈕","你點擊了OK!按鈕")
EndFunc
Func CloseWindow()
;注意: 此時 @GUI_CTRLID 的值將等於 $GUI_EVENT_CLOSE,
;而 @GUI_WINHANDLE 則等於 $FirstWindow
If @GUI_WinHandle=$FirstWindow Then
MsgBox(0, "窗口事件", "您選擇了關閉!正在退出...")
Exit
EndIf
EndFunc
4.函數(先跳過)
5.條件與循環語句
它們均可以多層嵌套。
利用條件和循環語句能夠簡化代碼並完成複雜的任務。
條件語句
if…then…else
例1:
Global $Num=2
If @OSVersion="WIN_XP" Then
If @UserName="Administrator" Then