AU3學習筆記

目錄
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

newuser 發表於 2010-8-18 10:50git

[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應用 

一.基礎部分 

        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。 

        #inclued 和 fileinstall() 
它們很相似,都是將指定的文件在腳本編譯的時候包含到被編譯的腳本中。但使用fileinstall()預裝須要包含的文件在編譯後會致使腳本的體積過大。 
#include能夠將預先寫好的函數或現有常量包含到腳本中,例#include <array.au3>或 #include <buttonconstants.au3>。 
fileinstall的語法:fileinstall(「sourcefilepath」,」destinationpath」[,flag]) ,其中flag但是0或1,0表示若是目的路徑下有相同文件不覆蓋,反之覆蓋。 

        消息循環模式 
對於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 
                        If $Num=2 Then  
                                MsgBox(0,"$Num值的判斷消息","$Num的值是:" & $Num) 
                        Else 
                                MsgBox(0,"$Num值的判斷消息","$Num的值不是2") 
                                Exit 
                        EndIf 
                Else 
                        MsgBox(0,"","不是以Administrator用戶身份登錄") 
                EndIf 
        Else 
                MsgBox(0,"","該系統不是WIN_XP系統") 
        EndIf 
例2: 
If @OSVersion="WIN_VISTA" Then 
                MsgBox(0,"","你的系統是WIN_VISTA") 
            ElseIf @OSVersion="WIN_2003" Then 
                    MsgBox(0,"","你的系統是WIN_2003") 
                ElseIf @OSVersion="WIN_XP" Then 
                MsgBox(0,"","你的系統是WIN_XP") 
                ElseIf @OSVersion="WIN_2000" Then 
                        MsgBox(0,"","你的系統是WIN_2000") 
        Else 
        EndIf 
select…case語句 
該選擇語句同時能進行多個條件的判斷。 
例1: 
Select 
            Case        @OSVersion="WIN_VISTA"  
                MsgBox(0,"","你的系統是WIN_VISTA") 
            Case @OSVersion="WIN_2003"  
                    MsgBox(0,"","你的系統是WIN_2003") 
                Case @OSVersion="WIN_XP"  
                MsgBox(0,"","你的系統是WIN_XP") 
                Case @OSVersion="WIN_2000"  
                        MsgBox(0,"","你的系統是WIN_2000") 
        Case Else 
        EndSelect 
switch…case選擇語句 
該選擇語句1次只能進行一個條件的判斷。 
例: 
Switch @OSVersion 
                Case "WIN_VISTA"  
                        MsgBox(0,"","你的系統是WIN_VISTA") 
                Case "WIN_2003"  
                        MsgBox(0,"","你的系統是WIN_2003") 
                Case @OSVersion="WIN_XP"  
                        MsgBox(0,"","你的系統是WIN_XP") 
                Case @OSVersion="WIN_2000"  
                        MsgBox(0,"","你的系統是WIN_2000") 
                Case Else 
        EndSwitch 
循環語句(5種) 
A.For…Next 
語法結構:for <variable>=startvalue to <stop>  [step] 
               statement 
           next 
例: 
For $x=10 To 1 Step -1  ;步長默認值爲1 
                SplashTextOn("標題",$x,100,50) ;splashtexton()用於建立一個自定義的文本閃平窗口 
                Sleep(1000)  ;延遲1秒 
        Next 
            ;SplashOff() ;固然是關閉閃屏窗口 
                MsgBox(0,"閃屏10秒後...","你們好,我是鄒國奎,很高興經過AU3讓咱們在這裏結識!但願咱們能成爲朋友") 
B.For <variable> In <expression> 
      statements 
      … 
  next 
該循環經常使用於「數據的陣列-an array of date」或「COM對象」,若是表達市不是以上兩種類型,腳本結束並有錯誤提示,若是COM對象是一個沒有任何元素的空對象集合,腳本會跳出循環執行下面語句。 
瞭解COM Object,首先要了解COM的Object名稱及它的properties(屬性)和methods(方法)。 
例: 
Global $Array[5] 
        $Array[0]="我" 
        $Array[1]="叫" 
        $Array[2]="鄒" 
        $Array[3]="國" 
        $Array[4]="奎" 
        For $Element In $Array 
                For $x=3 To 1 Step -1 
                        SplashTextOn("",$x,100,50) 
                        Sleep(1000) 
                Next 
                SplashOff() 
                MsgBox(0,"$Array every element is: ",$Element) 
                WinActivate("$Array every element is: ") 
                ;ControlClick("$Array every element is: ",$Element,"Button1") 
                SendKeepActive("$Array every element is: ") 
                Send("{Enter}") 
        Next 
C.Do  
  statements 
  … Until <expression> 
該循環語句至少先執行1次循環體內的代碼,再判斷條件是否知足來決定是否繼續執行循環體代碼。 
例: 
Dim $Variable=10 
        Do 
                SplashTextOn("標題",$Variable,100,50) ;splashtexton()用於建立一個自定義的文本閃平窗口 
                $Variable -=1 
                Sleep(1000)  ;延遲1秒 
        Until $Variable=0 
        SplashOff() 
        MsgBox(0,"閃屏10秒後...","你們好,我是鄒國奎,很高興經過AU3讓咱們在這裏結識!但願咱們能成爲朋友") 
D.While <expression> 
  statements 
  … 
  Wend 
該循環語句先判斷條件再決定是否執行循環體內的代碼,能夠一次循環體代碼都不執行。 
例: 
Dim $Variable=10 
        While $Variable>0 
                SplashTextOn("標題",$Variable,100,50) ;splashtexton()用於建立一個自定義的文本閃平窗口 
                $Variable -=1 
                Sleep(1000)  ;延遲1秒 
        WEnd 
        SplashOff() 
        MsgBox(0,"閃屏10秒後...","你們好,我是鄒國奎,很高興經過AU3讓咱們在這裏結識!但願咱們能成爲朋友") 
F.With <expression> 
  注意expression表達式必須是Object類型 
  … 
  EndWith 
  該語句常被用來簡化腳本代碼 
  例: 
  #cs 
        下列代碼沒有使用With...EndWith語句 
        #ce 
        $Object=ObjCreate("InternetExplorer.Application.1") 
        $Object.visible=1 
        $Object.height=768 
        $Object.width=1024 
        $Object.navigate("http://www.baidu.com") 
用With…EndWith簡化後 
$Object=ObjCreate("InternetExplorer.Application.1") 
        With $Object 
                .visible=1 
            .height=768 
            .width=1024 
                .navigate("http://www.baidu.com") 
        EndWith 
6.程序運行爲功能(CrossDoor) 
即程序運行於其它賬戶下。不是很理解,是以某個用戶身份編寫的AU3程序在其餘用戶身份無論是本地仍是遠程計算機上均可以執行的意思嗎? 
7.函數的參數傳遞 
函數的參數傳遞有「值傳遞」和「址傳遞」2種。值就是數值傳遞,以下列形式: 
Function(2,4) 
fucn Function($X,$Y) … EndFunc 
址傳遞 
Dim $x 
Function(2,4,$x) 
func Function($x,$y,ByRef $x) … EndFunc 
仍是來個例子: 
Dim $x 
MsgBox(0,"","zhouchang is: " & fucntion(2,4,$x)) 
Func fucntion($y,$z,ByRef  $x) 
        $x=($y+$z)*2 
        Return $x 
EndFunc 
8.函數的嵌套與遞歸 
嵌套就是在某個函數中調用其它的函數;遞歸就是函數本身調用函數,借用CroosDoor 的例子: 
MsgBox(0,"遞歸階乘",_Dg(5)) 
Func _Dg($n) 
        If $n=1 Then 
                Return 1 
        Else 
                Return $n * _Dg($n-1) 
        EndIf 
EndFunc 
第一步:$n=5 返回 5* _Dg(4) 
第2步:$n=4 返回4* _Dg(3) 
第3步:$n=3 返回 3* _Dg(4) 
第4步:$n=2 返回4* _Dg(1) 
第5步:$n=1 返回1 
結果就是:5*4*3*2*1 
9.正則表達式(必需要理解啊!!!) 
正則表達式的目的:判斷字符串是否符合某個語法規則和截獲符合規則的字符串及對符合規則的字符串進行替換。 
經常使用函數:StrintgRgeExp()和StringRegExpReplace()。 

10.註冊表操做 
注意註冊表中「鍵名」「值項」的理解 
例:讀取指定鍵名下具體值項的值 
$var=RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion","ProgramFilesDir") 
;綠色部分是鍵名,蘭色部分是值項 
MsgBox(4096,"Program files are in:", $var) 
例:學習RegEnumVal()---枚舉指定鍵名Run下的全部值項 
For $i=1 To 100 
        Dim $var=RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run",$i) 
        ;RegEnumVal("鍵名",序數) 序數默認值爲1 
        If @error <> 0 Then ExitLoop ;玫舉指定「鍵名下的值項失敗就退出循環」 
        MsgBox(0,"第"&$i&"個"&"開機啓動項是",$var) 
Next 
例:學習RegEnumKey---枚舉指定鍵名下的全部子鍵 
For $i=1 To 100 
        $var=RegEnumKey("HKEY_LOCAL_MACHINE\SOFTWARE",$i) 
        $var1=RegEnumKey("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services",$i) 
        If @error  <> 0 Then ExitLoop 
        MsgBox(4096,"計算機上已經安裝第"&$i&"個程序是:",$var) 
        MsgBox(4096,"計算機上已經安裝第"&$i&"個服務是:",$var1) 
Next 
寫、讀、刪註冊表 
例:普通文件的讀寫常規操做 
RegWrite("HKEY_CURRENT_USER\Software\Testzgk","testzgk1","REG_MULTI_SZ","My name is zgk!"&@LF&"Welcome to you!") 
MsgBox(0,"新建新鍵名Testzgk,它包含的值項是testzgk1,類型是REG_SZ",RegRead("HKEY_CURRENT_USER\Software\Testzgk","testzgk1")) 
RegDelete("HKEY_CURRENT_USER\Software\Testzgk") 
11.文件讀寫(包括對二進制文件內容的替換) 
當對少許文件進行讀寫操做時,可使用文件名,當對大量文件進行讀寫操做時,用文件句柄,文件句柄經過fileopen()函數得到,別忘了完成對文件的操做後用fileclose()關閉他,不然會嚴重影響腳本執行效率。 
filewrite()和filewriteline()對不存在的文件操做時能夠新建該文件,但若是文件路徑錯誤的話,就不會創建新的文件。 
例:FileWriteLine(@DesktopDir&"\testzgk.txt","第一行") ;按行寫入並自動換行 
FileWrite(@DesktopDir&"\testzgk.txt","test") ;按行寫入 
FileWrite(@DesktopDir&"\testzgk.txt","test1") ;接着按行寫入 
$var1=FileRead(@DesktopDir&"\testzgk.txt",4) ;讀取testzgk.txt的前4個字節內容,默認讀取整個文本內容 
$var3=FileRead(@DesktopDir&"\testzgk.txt") 
$var2=FileReadLine(@DesktopDir&"\testzgk.txt",2) 
MsgBox(0,"前4個字節:",""&$var1&@LF&"第2行:"&$var2&@LF&"整個文本內容是:"&@LF&$var3) 

注意fileopen(文件名,模式)的選擇,有隻讀模式和寫入到文件末尾模式及刪除原文見內容再寫模式等。 
例:沒有寫和讀模式並存的可能性嗎? 
$file=FileOpen(@DesktopDir&"\testzgk.txt",2+8)  
;注意第2個參數,2表示先清除原文件內容在進行寫操做,8表示打開的文件不存在將強行創建 
;0是隻讀模式,1是接着原文件內容進行寫操做  
;檢查打開的文件是否 可讀 
If $file = -1 Then 
        MsgBox(0,"錯誤","不能打開文件") 
        Exit 
EndIf 
FileWriteLine($file,"行") ;寫入一個字符串並以換行符結尾,也就是按行寫 
FileWrite($file,"t") 
MsgBox(0,"所有數據",FileRead($file)) ;句並是寫模式,因此讀取數據會失敗 
FileClose($file) 
例:對某文件的IP地址進行二進制的替換(文本內容僅1行:10.600.58.32) 
#include <WinAPI.au3> 
#include <WindowsConstants.au3> 
#include <GuiConstantsEx.au3> 

Global $sFile, $hFile, $sText, $nBytes, $tBuffer 


$sFile = @DesktopDir & '\test.txt' ;要讀取文件的路徑 
$sText = Binary(FileRead($sFile)) ;讀文件內容並將內容轉換成二進制 
$tBuffer = DllStructCreate("byte[" & StringLen($sText) & "]") ;建立1個C/C++樣式數據結構供dllcall()使用 
;語法:DllStructCreate ( "數據結構" [,指針] ) 
$Search=StringTrimLeft(Binary("58.32"),2) ;將文本中準備替換的內容轉換成二進制並從字符串左開始刪除指定數量的字符 
$Replace=StringTrimLeft(Binary("85.23"),2) 
$re=BinaryToString(StringReplace($sText,$Search,$Replace)) ;實現替換過程並將替換後的內容轉換成字符 
;MsgBox(0,0,$re) 
DllStructSetData($tBuffer, 1, $re) ;設置數據結構中部分元素的數據。語法:DllStructSetData ( 數據結構, 元素, 值 [, 索引 ] ) 
$hFile = _WinAPI_CreateFile($sFile, 2) ;爲其它設備建立或者打開一個文件. 
_WinAPI_WriteFile($hFile, DllStructGetPtr($tBuffer), StringLen($re), $nBytes) ;寫入數據到文件指定位置 
_WinAPI_CloseHandle($hFile) ;關閉打開文件的句柄 


至於.ini文件的讀寫,記住Iniread() iniwrite() inidelete() 
IniReadSection("INI文件名","字段") ;從某標準配置文件(*.ini)中讀取某個節中的全部關鍵字或值. 
IniReadSectionNames( "文件名" ) ;從某標準配置文件(*.ini)中讀取全部字段的信息.
web

newuser 發表於 2010-8-18 10:52正則表達式

[b]回覆 [url=http://www.autoitx.com/redirect.php?goto=findpost&pid=196304&ptid=17702]2#[/url] [i]newuser[/i] [/b] 
二.進階部分 
1.GUI操做示例講解 
例:讀取控件輸入框內容並顯示 
#include <guiconstants.au3> 
Opt("GUIOnEventMode",1) 
GUICreate("個人第一個窗口") 
GUISetOnEvent($GUI_EVENT_CLOSE,"_Exit") 
$Input=GUICtrlCreateInput("1111",10,35,300,20) 
$Btn=GUICtrlCreateButton("讀取輸入框",40,75,90,20) 
GUICtrlSetOnEvent($Btn,"_ReadInput") 
GUISetState(@SW_SHOW) 
While 1 
        Sleep(1000) 
WEnd 
Func  _Exit() 
        Exit 
EndFunc 
Func _ReadInput() 
        $Message=GUICtrlRead($Input) 
        MsgBox(0,"","讀取的輸入框的信息是:"&$Message) 
EndFunc 
例:讀取輸入框內容並隨機顯示窗口背景顏色 
#include <guiconstants.au3> 
;Global Const $GUI_EVENT_CLOSE=-3 ;窗口關閉消息的值 
Opt("GUIOnEventMode",1) ;從默認的消息模式更改成事件模式 
GUICreate("建立個人第一個窗口") 
GUISetOnEvent($GUI_EVENT_CLOSE,"main")  ;點擊窗口的關閉後函數main進行處理 
$Input=GUICtrlCreateInput("1111",10,35,300,20) 
$Btn=GUICtrlCreateButton("讀取輸入框",40,75,90,20) 
GUICtrlSetOnEvent($Btn,"main") ;點擊按鈕後函數main負責響應處理 
GUISetState(@SW_SHOW) 

While 1 
        GUISetBkColor(RandomColor()) 
        Sleep(3000) 
WEnd 

Func main() 
        Switch @GUI_CtrlId ;根據宏@GUI_CtrlId來判斷消息 
                Case $GUI_EVENT_CLOSE   
                        Exit 
                Case $Btn 
                        $D=GUICtrlRead($Input) 
                        MsgBox(0,"輸入框的數據是",$D) 
        EndSwitch 
EndFunc 

Func  RandomColor() 
        Return "0x"&Hex(Random(0,255,1),2)&Hex(Random(0,255,1),2)&Hex(Random(0,255,1),2) 
EndFunc ;產生一個隨機的RGB顏色值 
; Hex(表達式[,長度]) 
; Random([最小值[,最大值[,標誌]]]) 標誌爲1表示返回整數,默認返回浮點數 
例:讀取輸入框內容並隨機顯示窗口背景顏色 
本例重點理解:對已知Windows消息代碼的攔截 
同時注意學習GUIRegisterMsg()和WinSetTrans()函數的學習 
註釋:對本身編寫的腳本代碼中的窗口能夠容易的進行窗口消息的攔截,但對於外部程序的窗口進行消息攔截就必須注入到對方的進程中去 
;#include <guiconstants.au3> 
Global Const $GUI_EVENT_CLOSE=-3 ;窗口關閉消息的值 
Global Const $WM_ENTERSIZEMOVE=0X0231 ;窗口移動消息的值 
Global Const $WM_EXITSIZEMOVE=0X0232 ;窗口結束移動消息的值 
Opt("GUIOnEventMode",1) ;從默認的消息模式更改成事件模式 
$Gui=GUICreate("建立個人第一個窗口") 
GUISetOnEvent($GUI_EVENT_CLOSE,"main")  ;點擊窗口的關閉後函數main進行處理 
$Input=GUICtrlCreateInput("1111",10,35,300,20) 
$Btn=GUICtrlCreateButton("讀取輸入框",40,75,90,20) 
GUICtrlSetOnEvent($Btn,"main") ;點擊按鈕後函數main負責響應處理 
GUISetState(@SW_SHOW) 
GUIRegisterMsg($WM_ENTERSIZEMOVE,"WM_ENTERSIZEMOVE") ;當有窗口移動消息產生時,用自定義的函數WM_ENTERSIZEMOVE來響應處理 
;GUIRegisterMsg(msgID,自定義函數) 該函數是爲「已知的Windows消息代碼註冊一個用戶自定義函數」,我理解是「用戶自定義一個函數 
;來響應窗口GUI所產生的已知的Windows消息代碼,好比窗口移動、關閉或對控件各類點擊動做等 
GUIRegisterMsg($WM_EXITSIZEMOVE,"WM_EXITSIZEMOVE") ;當有結束窗口移動消息產生時,用自定義的函數WM_EXITSIZEMOVE來響應處理 

While 1 
        GUISetBkColor(RandomColor()) 
        Sleep(3000) 
WEnd 

Func main() 
        Switch @GUI_CtrlId ;根據宏@GUI_CtrlId來判斷消息 
                Case $GUI_EVENT_CLOSE   
                        Exit 
                Case $Btn 
                        $D=GUICtrlRead($Input) 
                        MsgBox(0,"輸入框的數據是",$D) 
        EndSwitch 
EndFunc 

Func  RandomColor() 
        Return "0x"&Hex(Random(0,255,1),2)&Hex(Random(0,255,1),2)&Hex(Random(0,255,1),2) 
EndFunc ;產生一個隨機的RGB顏色值 
; Hex(表達式[,長度]) 
; Random([最小值[,最大值[,標誌]]]) 標誌爲1表示返回整數,默認返回浮點數 

Func WM_ENTERSIZEMOVE($hWndGUI,$MsgID,$WParam,$LParam) 
        WinSetTrans($Gui,"",130) ;設置指定窗口的透明度 WinSetTrans("窗口標題","窗口文本",透明度) 
EndFunc ;窗口移動時,設置窗口透明值爲130 

Func WM_EXITSIZEMOVE($hWndGUI,$MsgID,$WParam,$LParam) 
        WinSetTrans($Gui,"",255) 
EndFunc ;窗口結束移動時,設置窗口透明值爲255,也就是不透明 
例:父窗口與子窗口的學習 
此處要增強(控件)標識和(控件)句柄的理解 
;#include <guiconstants.au3> 
Global Const $GUI_EVENT_CLOSE=-3 ;窗口關閉消息的值 
Dim $Child_Gui ;定義一個變量存儲子窗口的句柄 
Opt("GUIOnEventMode",1) ;從默認的消息模式更改成事件模式 
$Gui=GUICreate("建立個人第一個窗口") ;該窗口是 === 父窗口 
GUISetOnEvent($GUI_EVENT_CLOSE,"main")  ;點擊窗口的關閉後函數main進行處理 
$Input=GUICtrlCreateInput("1111",10,35,300,20) 
$Btn=GUICtrlCreateButton("讀取輸入框",40,75,90,20) 
GUICtrlSetOnEvent($Btn,"main") ;點擊按鈕後函數main負責響應處理 
$Show_Child_Btn=GUICtrlCreateButton("顯示子窗口",40,100,90,20) ;點擊該按鈕顯示 --- 子窗口 
GUICtrlSetOnEvent($Show_Child_Btn,"main") 
GUISetState(@SW_SHOW) 

While 1 
        GUISetBkColor(RandomColor()) ;GUISetBkColor ( 背景色 [, 窗口句柄] ) 
        Sleep(3000) 
WEnd 

Func main() 
        Switch @GUI_CtrlId ;根據宏@GUI_CtrlId標識來判斷消息 
                Case $GUI_EVENT_CLOSE   
                        Switch @GUI_WinHandle ;根據宏@GUI_WinHandle來判斷產生關閉消息的窗口信息 
                                Case $Gui ;若是當前窗口句柄是$Gui,退出腳本 
                                        Exit 
                                Case $Child_Gui ;若是當前窗口句柄是子窗口$Child_Gui,刪除子窗口 
                                        GUIDelete($Child_Gui) 
                        EndSwitch 
                Case $Btn 
                        $D=GUICtrlRead($Input) 
                        MsgBox(0,"輸入框的數據是",$D) 
                Case $Show_Child_Btn 
                        Child_Gui() 
        EndSwitch 
EndFunc 

Func Child_Gui() 
        $Child_Gui=GUICreate("",200,40,-1,-1,-1,-1,$Gui) ;GUICreate()裏的最後一個參數$Gui表示新創建的窗口是該變量所存儲的窗口句柄的子窗口 
        GUISetOnEvent($GUI_EVENT_CLOSE,"main") 
        GUISetState(@SW_SHOW) 
EndFunc 

Func  RandomColor() 
        Return "0x"&Hex(Random(0,255,1),2)&Hex(Random(0,255,1),2)&Hex(Random(0,255,1),2) 
EndFunc ;產生一個隨機的RGB顏色值 
; Hex(表達式[,長度]) 
; Random([最小值[,最大值[,標誌]]]) 標誌爲1表示返回整數,默認返回浮點數 

Func WM_ENTERSIZEMOVE($hWndGUI,$MsgID,$WParam,$LParam) 
        WinSetTrans($Gui,"",130) ;設置指定窗口的透明度 WinSetTrans("窗口標題","窗口文本",透明度) 
EndFunc ;窗口移動時,設置窗口透明值爲130 

Func WM_EXITSIZEMOVE($hWndGUI,$MsgID,$WParam,$LParam) 
        WinSetTrans($Gui,"",255) 
EndFunc ;窗口結束移動時,設置窗口透明值爲255,也就是不透明 
例:父窗口與子窗口的學習(注意:子窗口沒法移出到父窗口之外) 
Run("notepad.exe") 
WinWaitActive("無標題 - 記事本") 
$Gui=GUICreate("建立的窗口被嵌入到記事本",240,120) 
GUISetState() 
DllCall("user32.dll","int","SetParent","hwnd",$Gui,"hwnd",WinGetHandle("無標題 - 記事本")) 
Do 
Until GUIGetMsg()=-3 Or Not WinExists("無標題 - 記事本") ;當窗口消息等於退出消息或記事本窗口不存在時,就退出DO循環 

例1: 
#include <guiconstants.au3> ;包含了全部與GUI有關係的常量,好比$Gui_Event_Close 
#NoTrayIcon ;隱藏腳本運行時在任務欄tray顯示的圖標icon 
Global $SS_CENTER 
Opt('GuiOnEventMode',1) ;從循環消息模式更改到事件模式 
GUICreate("Ai Smart Homes - Saint Louis,Missouri",400,300) ;建立主窗口 
GUISetIcon("sysleak.ico") ;建立窗口圖標,就是在窗口標題前顯示的哪一個圖標 
GUISetOnEvent($GUI_EVENT_CLOSE,'GUIExit') ;點擊窗口右上角的叉時,調用函數GuiExit() 
GUICtrlCreatePic("080402070.jpg",120,5,156,160)  ;在GUI上建立圖片控件 
GUICtrlCreateLabel("Please Choose an Option Below:",98,180,300,15) ;在GUI上建立靜態標記控件,$SS_CENTER表示該控件的樣式 
GUICtrlSetColor(-1,0Xff0000)  ;設置控件顏色,-1表示爲當前控件 
GUICtrlCreateButton("Visit Our Website",100,210,200,30) ;在GUI上建立按鈕控件 
GUICtrlSetOnEvent(-1,'website') ;爲指定的控件點擊行爲定義用戶函數 
GUICtrlCreateButton("Send an Email",100,250,200,30) 
GUICtrlSetOnEvent(-1,'email') 
GUISetState(@SW_SHOW) ;顯示當前窗口 
Func website() 
        GUISetState(@SW_HIDE) ;隱藏當前窗口 
        Run("c:\program files\internet explorer\iexplore.exe 10.64.240.131") 
EndFunc 

Func email() 
        GUISetState(@SW_HIDE) 
        Run("mailto:zougk@petrochina.com.cn") 
        Exit 
EndFunc 


While 1 
        Sleep(500) 
WEnd 

Func  GUIExit() 
        Exit 
EndFunc 
例2:全部控件應用 
#include <guiconstants.au3> 
Global $ACS_AUTOPLAY 
GUICreate("GUI Control Examples",500,420) 
GUISetIcon(@WindowsDir & "\explorer.exe",0) 
$FileMenu=GUICtrlCreateMenu("File") 
GUICtrlCreateMenuItem("Example File  Menu Item",$FileMenu) 
$ContextMenu=GUICtrlCreateContextMenu() 
GUICtrlCreateMenuItem("Example1",$ContextMenu) 
GUICtrlCreateMenuItem("",$ContextMenu) 
GUICtrlCreateMenuItem("Example2",$ContextMenu) 
GUICtrlCreateTab(0,0,500,400) 
GUICtrlCreateTabItem("AVI,Button,Checkbox,ComboBox") 
GUICtrlCreateAvi(@WindowsDir & "\CLOCK.avi",-1,10,30,321,321,$ACS_AUTOPLAY) 
GUICtrlCreateLabel("AVI Example",140,355,60,15) 
GUICtrlCreateButton("Button Example",350,30,120,30) 
GUICtrlCreateCheckbox("Checkbox Example",350,70,120,30) 
GUICtrlCreateCombo("ComboBox Example",350,110,120,30) 
GUICtrlCreateTabItem("Group,Date,Dummy,Edit,Icon,Input,List,ListView") 
GUICtrlCreateGroup("Group Example",20,40,460,60) 
GUICtrlCreateDate("",30,60,200,25) 
$DummyButton=GUICtrlCreateButton("Dummy Example",270,60,200,25) 
$Dummy=GUICtrlCreateDummy() 
GUICtrlCreateGroup("",-99,-99,1,1) 
GUICtrlCreateEdit("Edit Example",30,120,440,60) 
GUICtrlCreateIcon(@WindowsDir & "\cursors\drum,ani",-1,30,200,32,32) 
GUICtrlCreateLabel("Icon  Example",70,210,80,20) 
GUICtrlCreateInput("Input Example",160,205,300,20) 
GUICtrlCreateList("List Example",30,240,440,80) 
$ListView=GUICtrlCreateListView("List View Example",30,330,440,60) 
GUICtrlCreateListViewItem("List View Item Example",$ListView) 
GUICtrlCreateTabItem("ActiveX  Object") 
GUICtrlCreateLabel("ActiveX Object Example",10,30,140,20) 
$IE=ObjCreate("Shell.Explorer.2") 
$GUIActiveX=GUICtrlCreateObj($IE,10,50,480,340) 
$IE.navigate("http://www.aismarthomes.com") 
GUICtrlCreateTabItem("Picture,Progress,Radio,Slider,TreeView,Updown") 
GUICtrlCreatePic(@WindowsDir & "\blue lace 16.bmp",10,30,40,40) 
GUICtrlCreateLabel("Picture Example",55,45,80,20) 
GUICtrlCreateLabel("Process Example",400,70,90,20) 
$Progress=GUICtrlCreateProgress(10,90,480,25) 
GUICtrlSetData($Progress,33) 
GUICtrlCreateRadio("Radio Example",10,140,90,20) 
GUICtrlCreateLabel("Slider Example",290,170,100,20) 
GUICtrlCreateSlider(180,130,280,30) 
GUICtrlCreateLabel("Tree View Example",10,200,120,20) 
$TreeView=GUICtrlCreateTreeView(10,220,480,60) 
$TreeTopLevel=GUICtrlCreateTreeViewItem("Tree View  Example",$TreeView) 
GUICtrlCreateTreeViewItem("Subitem1",$TreeTopLevel) 
GUICtrlCreateTreeViewItem("Subitem2",$TreeTopLevel) 
GUICtrlCreateLabel("Example  Updown",10,300,100,20) 
$UpDownInput=GUICtrlCreateInput("0",10,320,480,60) 
GUICtrlCreateUpdown($UpDownInput) 
GUICtrlCreateTabItem("") 
GUISetState(@SW_SHOW) 
While 1 
        $GuiMsg=GUIGetMsg() 
        Select 
                Case $GuiMsg=$DummyButton 
                        GUICtrlSendToDummy($Dummy) 
                Case $GuiMsg=$Dummy 
                        MsgBox(0,"Dummy Example","You have clicked the dummy button.") 
                Case $GuiMsg=$GUI_EVENT_CLOSE 
                        Exit 
        EndSelect 
WEnd 
例3:讀取控件內容並運行指定程序 
#include <guiconstants.au3> 
GUICreate("Combo  Example",200,80) 
GUISetIcon(@WindowsDir & "\explorer.exe",0) ;設置窗口標題的圖標 
$ComboBox=GUICtrlCreateCombo("Notepad",10,10,120,20) 
GUICtrlSetData(-1,"Paint|Commad Prompt") 
$Button=GUICtrlCreateButton("Go",10,40,60,20) 
GUISetState(@SW_SHOW) 
While 1 
        $GuiMsg=GUIGetMsg() 
        Select 
                Case $GuiMsg=$Button 
                        MsgBox(0,"","You Choose is: " & GUICtrlRead($ComboBox) & ".") 
                           Select 
                                Case GUICtrlRead($ComboBox)="Notepad" 
                                        Run("notepad.exe") 
                                        Exit 
                                Case GUICtrlRead($ComboBox)="Paint" 
                                        Run("mspaint.exe") 
                                        Exit 
                                Case GUICtrlRead($ComboBox)="Command Prompt" 
                                        Run("cmd.exe") 
                                        Exit 
                        EndSelect 
                Case $GuiMsg=$GUI_EVENT_CLOSE 
                        Exit 
        EndSelect 
Wend2. AU3中的DLL應用 
語法: DllCall("dll","return type","function"[,"type1",param1[,"typen",param n[]) 
dll :就是函數function()所對應或存在於的那個Dll file,例1中我要用DllCall()代替Sleep(),而sleep()存在於 kerner32.dll中。 
Retrun type :返回類型,sleep()沒有返回值,因此應該是」none」 
function :函數,例1就是sleep。 
type : 參數類型,MSDN規定是DWORD,在AU3中簡化爲dword。 
例1:使用DLLCALL()代替sleep()延遲1秒 
MsgBox(0,"","i",2) ;2秒後顯示的i消失 
;Sleep(1000) 
DllCall("kernel32.dll","none","Sleep","dword",1000) ;延遲1秒 
MsgBox(0,"","love",2) 
DllCall("kernel32.dll","none","Sleep","dword",1000) 
MsgBox(0,"","you",2) 
DllCall("kernel32.dll","none","Sleep","dword",1000) 
例2:使用DllCall()實現MessageBoxW()函數功能 
DllCall("user32.dll","int","MessageBoxW","hwnd",0,"wstr","Hello  from Dll tutoorial!","wstr","info","uint",0) 
;MessageBox()函數存在於user32.dll中 
;返回類型爲int 
;由於顯示的字符串信息,經常使用的字符編碼方式是ANSI(美國的工業化標準)和Unicod(統一字符標準) 
;因此須要在其function名稱後加A或W,經常使用Unicode,因此MessageBox寫成MessageBoxW 
;hwnd是窗口句柄類型,由於沒有窗口,因此是0 
;第1個wstr表示消息窗口所顯示的信息,若是將wstr改寫成str就顯示亂碼了,這可能就是字符編碼的問題了! 
;第2個wstr表示消息窗口的標題 
;uint表示消息窗口的顯示風格 
按ASCII碼顯示(wstr可改爲str了): 
DllCall("user32.dll","int","MessageBoxA","hwnd",0,"str","Hello  from Dll tutoorial!","str","info","uint",0) 
例3:使用Dllcall()實現GetDiskFreeSpace()函數功能 
問題:這裏參數的類型爲何是 dword* 而不是 dword?若是拿掉 * 顯示結果爲  0 顯然是錯的! 
;Variable to pass as referecne 變量做爲參考來傳遞 
Local $SectorsPerCluster ;每一個簇的扇區數 
Local $BytesPerSector ;每一個扇區的字節數 
Local $NumberOfFreeClusters ;自由簇的數量  
Local $TotalNumberOfClusters ;總的簇數 
$calldata=DllCall("Kernel32.dll","int","GetDiskFreeSpaceW","wstr","D:\","dword*",$SectorsPerCluster,"dword*",$BytesPerSector,"dword*",$NumberOfFreeClusters,"dword*",$TotalNumberOfClusters) 
;獲取D盤相關以上信息 
;The data is returned as an  array,even  the changed values  of the variables 
$SectorsPerCluster=$calldata[2] 
$BytesPerSector=$calldata[3] 
$NumberOfFreeClusters=$calldata[4] 
$TotalNumberOfClusters=$calldata[5] 
MsgBox(0,"","Total number of clusters:" & $TotalNumberOfClusters) 

在windows的 全部DLLS中和有關AU3的DLLS的調用協議或慣例calling conventions(我還不懂它): 
一種是: 
;With stdcall 全部windows dlls使用the stdcall calling conventions 
DllCall(「SomeDll」,」int」,」Func」) 
另外一種是: 
;With cdecl 
DllCall(「SomeDll.dll」,」int:cdecl」,」Func」) 

例4:用DllCall()實現GetSystemTime() 
問題:得到的時間是上午時間? 
解:&DllStructGetData($SYSTEMTIME,"wHour")+8,注意多了 +8   (感謝C.L) 
ushort :無符號的16位整數 
Word: 無符號的16位整數 
int: 32位整數 
Ptr: 常規指針(void *) 
$SYSTEMTIME=DllStructCreate("ushort wYear;ushort wMonth;ushort wDayOfWeek;ushort wDay;ushort wHour;ushort wMinute;ushort wSecond;ushort wMilliseconds") 
DllCall("Kernel32.dll","none","GetSystemTime","ptr",DllStructGetPtr($SYSTEMTIME)) 
MsgBox(0,"如今的時間是:",DllStructGetData($SYSTEMTIME,"wYear")&":"&DllStructGetData($SYSTEMTIME,"wMonth") _ 
&":"&DllStructGetData($SYSTEMTIME,"wDay")&" "&DllStructGetData($SYSTEMTIME,"wHour")&":"&DllStructGetData($SYSTEMTIME,"wMinute"))該例應用了DllStructCreate()來建立Dll的結構,所謂DllStruct能夠理解爲「數據的壓縮包,包裏全部變量在內存中互相挨着」, 
補充一例子:顯示系統圖標與索引 
; ******************************************************* 
; 示例 3 - 顯示系統更改圖標窗口 
; ******************************************************* 
$sFileName  = @SystemDir & '\shell32.dll' 
; 建立一個數據結構儲存圖標索引 
$stIcon     =  DllStructCreate("int") 
$stString       = DLLStructCreate("wchar[260]") 
$structsize = DllStructGetSize($stString)/2 
DllStructSetData($stString, 1, $sFileName) 
; 運行更改圖標窗口 - '62' 是這個函數的順序值 
DllCall("shell32.dll", "none", 62, "hwnd", 0, "ptr", DllStructGetPtr($stString), "int", $structsize, "ptr", DllStructGetPtr($stIcon)) 

$sFileName  = DllStructGetData($stString, 1) 
$nIconIndex = DllStructGetData($stIcon, 1) 
; 顯示文件名和圖標索引 
Msgbox(0, "信息", "最後選擇的文件: " & $sFileName & @LF & "圖標索引: " & $nIconIndex 
AutoIt基礎實踐練習筆記一  
1.列出本機驅動器個數並分別顯示出來? 
代碼以下: 
$drivetotal=DriveGetDrive("all") 
If Not @error Then 
        MsgBox(0,"全部驅動器類型", "總共有" & $drivetotal[0] & "個驅動器") 
          For $x=1 To $drivetotal[0]  
                  MsgBox(0,"第" & $x & "個驅動器是:",$drivetotal[$x]) 
          Next 
EndIf 
注意:應進行if錯誤判斷 
2.建立一個新文件,並逐行寫入內容? 
代碼以下: 
$accordlinewrite=FileOpen("c:\zgktest.txt",1) 
If @error Then  
        MsgBox(0,"error","文件未打開或建立新文件失敗") 
Else 
        FileWrite($accordlinewrite,"往第1行寫的內容") 
        FileWrite($accordlinewrite,"繼續往第1行寫內容" & @CRLF) 
        FileWrite($accordlinewrite,"往第2行寫入的內容") 
EndIf 
FileClose($accordlinewrite) 
注意:fileopen()並非一般的「打開文件」,而是AutoIt3後臺打開並進行操做 
3.逐行讀去文件內容? 
代碼以下: 
HotKeySet("{F2}","_Copy") 
;定義F2爲熱鍵,按下F2後,執行函數「 _Copy  " 

Global $LineNum=1 
Global $IniFile=FileOpenDialog("選擇要讀取的文本文件","","(*)") 
If @Error Then Exit 
;"選擇要讀取的文本文件"是"打開文件窗口的標題" 
;" "是你指定"打開文件的路徑",空默認爲"系統根目錄下" 
;(*)是"打開的文件類型" 

While 1 
Sleep(500) 
WEnd 
;不清楚,等待什麼呢?我把它拿掉也沒影響什麼?不過我也是剛學AU3不到1個月,還沒摸到門呢? 

Func _Copy() 
$GetLine=FileReadLine($IniFile,$LineNum) 
If @Error=-1 Then 
$LineNum=1 
Else 
ClipPut($GetLine) 
Send("^{V}") 
$LineNum+=1 
EndIf 
EndFunc 
;if @Error=-1 若是到文件末尾,在返回文件首行 
;ClipPut($GetLine) 將讀取到的內容放到剪貼板上,在 Send("^{V}") 進行粘貼,再 $LineNum+=1 進入下一行 
4.播放AVI文件? 
#include <GUIConstants.au3> 
$x=ObjCreate("WMPlayer.OCX") 
$Form1 = GUICreate("AForm1", 500,400, 193, 200) 
$Button1 = GUICtrlCreateButton("開始", 104, 344, 97, 33, 0) 
$Button2 = GUICtrlCreateButton("中止", 272, 336, 121, 41, 0) 
$sky=GUICtrlCreateObj($x, 100,50,500,500) 
GUISetState(@SW_SHOW) 
$x.uimode="none" 
$x.url="F:\家庭錄象\yiyan\liuyi107.avi" 
$x.Controls.play 

;MsgBox(0,"",$sky) 
While 1 
$nMsg = GUIGetMsg() 
Switch $nMsg 
   Case $GUI_EVENT_CLOSE 
    Exit 

EndSwitch 
Wend 
5.自動創建文本文件並保存? 
代碼以下: 
Send("#r") 
;#表示Windows徽標,即發送Win+R 
WinWaitActive("運行") 
Send("notepad.exe{Enter}") 
;發送notepad.exe到運行窗口並回車 
WinWaitActive("無標題 - 記事本") 
Send("這裏是經過WIN+R打開運行窗口,再自動輸入notepad.exe後,在打開記事本程序自動輸入指定內容後保存並退出 {F5}") 
;Send("如今的時間/日期是 {F5}")  
WinClose("無標題 - 記事本") 
WinWaitActive("記事本") 
Send("!Y") 
WinWaitActive("另存爲") 
Send("testautosave.txt!S") 
;將新創建的文本文件命名爲testautosave.txt並存儲 
遺留問題(已解決-感謝C.L):沒法存儲到指定路徑? 
Send("#r") 
WinWaitActive("運行","打開(&O)") 
ControlSetText("運行","打開(&O)","Edit1","notepad.exe") 
ControlClick("運行","打開(&O)","Button2") 
WinWaitActive("無標題 - 記事本") 
Send("用於測試對於ComboBox的操做,其中還包括測試controlcommand下的setcurrentselection  selectstring") 

WinClose("無標題 - 記事本") 
;Send("!F") 
;Send("!X") 

WinWaitActive("記事本","文件 無標題 的文字已經改變。") 
ControlClick("記事本","文件 無標題 的文字已經改變。","Button1") 
WinWaitActive("另存爲","保存在") 

;ControlCommand("另存爲","保存在","ComboBox1","SelectString","本地磁盤 (C:)") 
;ControlCommand("另存爲","保存在","ComboBox1","SetCurrentSelection",5) 

ControlSetText("另存爲","保存在","Edit1","testComboBox.txt") 
;其實改爲ControlSetText("另存爲","保存在","Edit1","c:\testComboBox.txt")就OK了 
ControlClick("另存爲","保存在","Button2") 

新問題: 
1. ControlCommand("另存爲","保存在","ComboBox1","SelectString","本地磁盤 (C:)") 
爲何很差使?(已解決-感謝afan) 
是" 本地磁盤 (C:)"前的圖標沒有捕獲形成的嗎?多是「該圖標形成字符串不匹配最終形成ControlCommand()失效! 
在該語句前/後分別加上:ControlClick("另存爲","保存在","ComboBox1")就確保ControlCommand()成功 
個人理解:由於她特殊,controlclick()先讓它得到焦點,在利用controlcommand()下的selectstring命令選中但願的存儲路徑,再controlclick()返回到到ComboBox上,這樣理解容易些! 
2. ControlCommand("另存爲","保存在","ComboBox1","SetCurrentSelection",5) 
爲何很差使? 
它不涉及圖標的問題啊! 
方法補充一(條條大路同羅馬): 
$newfilename="c:\zgknew.txt" 
$newfilecontents="C盤下新創建一個文件zgknew.txt,寫入內容後自動保存" 
$temp=FileOpen($newfilename,2) 
FileWrite($temp,$newfilecontents) 
FileClose($temp) 
6.求某正數的立方? 
代碼以下: 
Dim $x,$y 
While 1 
$x=InputBox("inputbox","請輸入一個正整數:","","",50,50,"","",10) 
$y=$x^3 
  Select 
        Case @error=0   
                MsgBox(0,"inputbox  成功",$x & "的3次方是:"  & $y) 
        Case @error=1  
                MsgBox(0,"canel","你按了取消按鈕") 
                ExitLoop 
        Case @error=2  
                MsgBox(0,"delay","時間超時") 
                ExitLoop 
  EndSelect 
Wend 
注意:當使用inputbox()輸入時,必定要驗證「當按下Cancel按鈕時的動做」 
7.對輸入的學生分數進行評價? 
代碼以下: 
Dim $score 
While 1 
$score=InputBox("分數輸入","請輸入每名學生的分數:") 
;$score=InputBox("分數輸入","請輸入每名學生的分數:","","",100,50,150,250,50) 
;"default"是InputBox內默認的值 

;If @error=1 Then MsgBox(0,"取消","你按了取消按鈕") 

If @error=1 Or $score="" Then 
        MsgBox(0,"發生錯誤","你按了取消按鈕或輸入值爲空") 
        Exit 
EndIf 
If @error=2  Then MsgBox(0,"超時了","在規定時間內你沒有輸入學生分數") 


Select 
        Case $score>90 And $score<=100 
                MsgBox(0,"優秀類","該名學生成績優秀") 
        Case $score>80 And $score<=90 
                MsgBox(0,"良好類","該名學生成績良好") 
        Case $score>=60  And $score<=80 
                MsgBox(0,"優秀","該名學生成績及格") 
        Case $score>=0 And $score<60 
                MsgBox(0,"優秀","該名學生成績不好") 
        Case Else 
                MsgBox(0,"輸入錯誤","輸入了不正確的分數") 
EndSelect 
Wend 
個人錯誤:把If @error=1 Or $score="" 中的紅色部分寫成了@error=」」,這樣不管輸入什麼樣的分數都先執行 MsgBox(0,"發生錯誤","你按了取消按鈕或輸入值爲空") 再進行case判斷。 
8.  
;目的:隨意輸入4位之內的整數,判斷它是多少位,每一位數分別是什麼,並把它們反向排列成一個新數 
;技巧:把十位 百位 千位 都當 個位 來處理 
   
Dim $Unit=0,$Ten=0,$Hundred=0,$Thousand=0 
Dim $Digit=1 
Dim $Num,$NewNum 
$Num=InputBox("輸入框","請輸入4爲數之內的整數") 
If @error=1 Or $Num="" Then 
        MsgBox(0,"發生錯誤","按了Cancel按鈕或輸入值爲空") 
        Exit 
EndIf 
Select 
        Case $Num>=0 And $Num<10 
                $Digit=1 
                $Unit=Mod($Num,10) 
                $NewNum=$Unit 
        Case $Num>=10 And $Num<100 
                $Digit=2 
                $Unit=Mod($Num,10) 
                $Ten=Mod(($Num-$Unit)/10,10) 
                $NewNum=$Ten+$Unit*10 
        Case $Num>=100 And $Num<1000 
                $Digit=3 
                $Unit=Mod($Num,10) 
                $Ten=Mod(($Num-$Unit)/10,10) 
                $Hundred=Mod(($Num-$Ten*10-$Unit)/100,10) 
                $NewNum=$Hundred+$Ten*10+$Unit*100 
        Case $Num>=1000 And $Num<=9999 
                $Digit=4 
                $Unit=Mod($Num,10) 
                $Ten=Mod(($Num-$Unit)/10,10) 
                $Hundred=Mod(($Num-$Ten*10-$Unit)/100,10) 
                $Thousand=Mod(($Num-$Hundred*100-$Ten*10-$Unit)/1000,10) 
                $NewNum=$Thousand+$Hundred*10+$Ten*100+$Unit*1000 
        EndSelect 
        MsgBox(0,"digit","這是一個"&$Digit&"位數"&@CRLF _ 
        &"個位:"&$Unit&@CRLF&"十位:"&$Ten&@CRLF&"百位:"&$Hundred&@CRLF  _ 
        &"千位:"&$Thousand&@CRLF&"重組的新數:"&$NewNum) 
9.忽然想用AutoIt3自動MSTSC? 
代碼以下: 
Run("mstsc") 
WinWaitActive("遠程桌面鏈接","鏈接(&N)") 
ControlSetText("遠程桌面鏈接","鏈接(&N)","Edit1","要登錄的IP") 
ControlClick("遠程桌面鏈接","鏈接(&N)","Button1") 
WinWaitActive("要登錄的IP - 遠程桌面") 
;注意上面的窗口標題我改了 
Send("password{Enter}") 
補充(感謝cnhfg): 
send(("+{tab}")) 
send("administrator") 
send("{tab}") 
send("123") 
send("{enter}") 
10.輸出一個3行5列矩陣? 
代碼以下: 
Dim $i,$j 
;分別定義了對 行 和 列  操做的2個變量 
Dim $s="" 
;定義了用於輸出目的的變量 
For $i=1 To 3 
        For $j=1 To 5 
                $s=$s&" " & ($i*10+$j) 
        Next 
    $s=$s & @CRLF 
Next 
MsgBox(0,"從第1到第3逐行輸出:",$s) 

;錯誤:$s=$s&" " & ($i*10+$j) 
;首先輸出的數字是連着的,緣由是將 " "寫成了"" 
;其次是將($i*10+$j)寫成了"$i*10+$j 
11.要求只能用20張10元、20元、50元的人民幣組成總額爲600元,問總共有多少組法? 
代碼以下: 
Dim $Ten,$Twenty,$Fifty 
;分別定義 10   20    50 人民幣的張數 變量 
Dim $Sum="" 
;定義了成功組合的結果 變量  
For $ten=0 To 20 
        For $Twenty=0 To 20 
                For  $Fifty=0 To 12 
                        If  $Ten+$Twenty+$Fifty=20 And $Ten*10+$Twenty*20+$Fifty*50=600 Then 
                                $Sum=$Sum&"10元人民幣是:"&$Ten&"張 "&"20元人民幣的是:"&$Twenty&"張 "&"50元人民幣是:"&$Fifty&"張 "&@CRLF 
                        EndIf 
                Next 
        Next 
Next 
;由於限定了只能用20張人民幣 
;而可能使用的10元人民幣張數在0-60之間;可能使用的20元人民幣張數在0-30之間;可能使用的50元人民幣張數在0-12之間; 
;以上2個條件必須同時符合,因此10元在0-20之間;20元在0-20之間;50元在0-12之間才行 
MsgBox(0,"顯示組合結果",$Sum) 
;個人錯誤 $Sum="10元人民幣是:"&$Ten&"張 "&"20元人民幣的是:"&$Twenty&"張 "&"50元人民幣是:"&$Fifty&"張 "&@CRLF 
;少了$Sum=$Sum&"10元人民幣是:"&$Ten&"張 "&"20元人民幣的是:"&$Twenty&"張 "&"50元人民幣是:"&$Fifty&"張 "&@CRLF,這是個致命錯誤,沒有使用初始狀態的$Sum,固然只能顯示最後一次成功組合的信息,照貓畫貓是不行的啊!!! 
12.關於ASCII的瞭解? 
ASCII列表就是「字符串與ASCII值一一對應的關係表」。 
ASC(字符串) :將字符串轉換成對應的ASCII值 
Chr(ASCII值) :將ASCII值轉換成字符串 
@CR 對應13 ;@LF  對應10 ;@TAB 對應 9 
A-Z 分別對應65-90  ;a-z 分別對應 97-122 
具體示例代碼1: 
Dim $i,$s 
$s="" 
For $i=65 To 90 
        $s=$s&Chr($i)&" " 
Next 
MsgBox(0,"依次顯示ASCII值從65-90所對應的字符串值",$s) 
具體示例代碼2: 
Dim $Char 
While 1 
$Char=InputBox("斷定輸入是不是字母","請輸入字符") 
If @error=1 Or  $Char=""  Then 
        MsgBox(0,"輸入非法","你輸入的不是字符或輸入爲空") 
        Exit 
EndIf 
If (Asc($Char)>=65 And Asc($Char)<=90) Or (Asc($Char)>=97 And Asc($Char)<=122) Then 
        MsgBox(0,"輸入正確","你輸入的是A-Z或a-z中的字母"&"中的 "&$Char) 
Else 
        MsgBox(0,"輸入錯誤","你輸入的不是A-Z或a-z中的字母") 
        Exit 
EndIf 
Wend 
13.乘法口訣? 
方法1: 
Dim $i,$j 
Dim $s="" 
For $i=1 To 9 
        For $j=1  To 9 
                $s&=StringFormat ("%2d *%2d=%-2d",$i,$j,$i*$j)&"  " 
        Next 
        $s=$s&@CRLF 
Next 
;$s = StringReplace ($s,"=0","=  ")     修改了StringFormat(),該行能夠省略掉了    
MsgBox(0,"乘法口訣列式",$s) 

;感謝C.L 
;StringFormat("格式控制字符串",變量1[,...變量32]) 
;返回根據「格式控制字符串」參數定義中的「變量格式」格式化後的字符串 
;好繞嘴,就是根據「格式控制字符串定義的格式進行後續變量的輸出 
; % 格式控制字符串標識 
; 2d 以整數類型輸出,2是輸出的寬度 
; - 在指定的寬度左對齊,默認是右對齊 
;我將$s&=StringFormat ("%2d*%2d=%2d",$i,$j,$i*$j)&"  " 改爲 $s&=StringFormat ("%2d *%2d=%-2d",$i,$j,$i*$j)&"  " 

;StringReplace("字符串","搜索串"或起始位置,"替換串"[,數量[區分大小寫]] 
;$text = StringReplace("this is a line of text", " ", "-") 
;$numreplacements = @extended 

;@extended 擴展函數返回值,經常使用於StringReplace() 

;MsgBox(0, "替換後:", $text) 
;MsgBox(0, "替換操做次數:", $numreplacements) 

方法2:@TAB 製表符 
;感謝lpxx 
Dim $i,$j 
Dim $s="" 
For $i=1 To 9 
        For $j=1  To 9 
                $s=$s&$i&"*"&$j&"="&($i*$j)&" "& @TAB 
        Next 
        $s=$s&@CRLF 
Next 
MsgBox(0,"乘法口訣列式",$s) 
方法3:設置內循環 
;感謝netegg 
Dim $i,$j 
Dim $s="" 
For $i=1 To 9 
        For $j=1  To  $i ;精華所在 
                $s=$s&$j&"*"&$i&"="&($j*$i)&" "& @TAB 
        Next 
        $s=$s&@CRLF 
Next 
MsgBox(0,"乘法口訣列式",$s)
shell

newuser 發表於 2010-8-18 10:53express

[b]回覆 [url=http://www.autoitx.com/redirect.php?goto=findpost&pid=196306&ptid=17702]3#[/url] [i]newuser[/i] [/b] 

14.字符串相關函數了解? 
代碼以下: 
Dim $Name="My name is zougk! Welcome to my style" 
Dim $Str1,$Str2,$Str3,$Str4,$Str5,$Str6,$Str7,$Str8,$Str9,$Str10,$Str11,$Str12 
Dim $Len 
$Str1=StringLeft($Name,16) 
MsgBox(0,"StringLeft'use",$Str1) 
$Str2=StringRight($Name,19) 
MsgBox(0,"StringRight'use",$Str2) 
$Str3=StringMid($Name,12,5) 
MsgBox(0,"StrintgMid'use",$Str3) 
$Len=StringLen($Name) 
MsgBox(0,"變量$Name的長度","字符串"&$Name&"的長度是:"&$Len&"位") 
$Str4=StringUpper($Name) 
MsgBox(0,"小寫字母變大寫",$str4) 
$Str5=StringLower($Name) 
MsgBox(0,"大寫字母變小寫",$Str5) 
$Str6=StringReplace($Name,"zougk","zouyy") 
MsgBox(0,"字符串指定內容替換",$Str6) 
$Str7=StringSplit($Name," ",0) 
MsgBox(0,"字符串按空格進行分割","第1個字母"&$Str7[1]&" "&"第2個字母"&$Str7[2]) ;以後省略吧 
$Str8=StringSplit($Name,"",1) 
MsgBox(0,"字符串按單詞逐個分割","第1個字母"&$Str8[1]&" "&"第2個字母"&$Str8[2]) ;以後省略吧 

; [已解決]誰能告訴我 StringSplit($Name," ",0) 和 StringSplit($Name," ",1) 的區別? 
Dim $Name="My name is zougk, Welcome to my style" 
Dim $Str1,$Str2,$Str3,$Str4,$Str5,$Str6,$Str7,$Str8,$Str9,$Str10,$Str11,$Str12 
Dim $Len 
$Str1=StringSplit($Name,", ",0) 
MsgBox(0,"test stringsplit","第1個被分割的子字符串"&$Str1[1]&@CRLF&"第2個被分割的子字符串"&$Str1[2]& _ 
@CRLF&"第3個被分割的子字符串"&$Str1[3]&@CRLF&"第4個被分割的子字符串"&$Str1[4]&@CRLF& _ 
"第5個被分割的子字符串"&$Str1[5]&@CRLF&"第6個被分割的子字符串"&$Str1[6]&" ") 
$Str2=StringSplit($Name,", ",1) 
MsgBox(0,"test2 stringsplit",$Str2[1]) 

;感謝afn 
;分割符是對分割符前的」子字符串"進行分割,到了第5個分割符前的子字符串是空 
;對於只有1個分割符的StringSplit("字符串","分割符",flag),flag爲0或1都同樣 
;對於大於等於2個分割符的StringSplit("字符串","分割符",flag),flag爲0表示「分割符以 個體形式  參與到分割字符串的行動中來 
;對於大於等於2個分割符的StringSplit("字符串","分割符",flag),flag爲1表示「分割符以 總體形式  參與到分割字符串的行動中來 

$Str9=StringStripWS($Name,8) 
MsgBox(0,"去掉字符串中的全部空格空格",$str9) ;StringStripWS("字符串",標誌) 標誌爲8是去掉全部空格,還能夠設置爲1 2  4 
$Str10=StringTrimLeft($Name,17) 
MsgBox(0,"從左截掉指定數量的字符後剩餘的字符串",$Str10) 
$Str11=StringTrimRight($Name,19) 
MsgBox(0,"從右截掉指定數量的字符後剩餘的字符串",$Str11) 
$Str12=StringIsAlNum($Name)  ;斷定$Name是否徹底是字母或數字,是返回1,因有  空格  和 ! ,因此返回0 
;StringIsAlpha("string") 斷定string是否徹底是字母 
MsgBox(0,"字符串是否徹底是字母",$Str12) 
$Str13=StringInStr($Name,"my",0)  
;StringInStr("字符串","子字符串",是否區分大小寫 0是不區分大小寫,出現次序 
MsgBox(0,"檢查字符串中是否包含指定的子字符串",$Str13) 
$Str14=StringInStr($Name,"my",1,1) 
MsgBox(0,"檢查字符串中是否包含指定的子字符串",$Str14) 
15._arraydisplay  函數的應用? 
代碼以下: 
#include <array.au3> 
Dim $HomeMember[3][3]=[["zgk","1970",40],["yhh","1980",30],["zyy","2000",10]] 
_ArrayDisplay($HomeMember,"家庭信息") 
;個人錯誤是["yhh","1980,30]少了一個雙引號,還覺得是在中英輸入狀態下的[ ]出了問題呢? 
16.打開指定網頁? 
錯誤:run(「iexplore.exe [url]http://sohu.com[/url]」) 
緣由:iexplore.exe路徑有問題,run沒法找到它,Run("C:\Program Files\Internet Explorer\iexplore.exe [url]http://10.64.240.131[/url]")解決 
補充:Run("Notepad.exe", "", @SW_MAXIMIZE),最大化的運行記事本 
Run("C:\Program Files\Internet Explorer\iexplore.exe [url]http://10.64.240.131[/url]","",@SW_HIDE),打開指定網站並隱藏 
Run(「control  sysdm.cpl」),打開「控制面板」下的「系統屬性」 
ShellExecute("rundll32.exe","shell32.dll,#61"),打開「開始」「運行」 
ShellExecute("rundll32.exe","shell32.dll,#60"),打開「關閉Windows」窗口 

遺留問題(2010.3.11): 
如何將C:\Program Files換成%ProgramFiles%而變的通用? 
解決(2010.3.11): 
run(@ProgramFilesDir  & 「\Internet  Explorer\iexplore.exe [url]http://10.64[/url]」,」」,@SW_Maximize) 
@ProgramFilesDir  AutoIt3系統變量,指定C:\Program Files具體位置 
&  字符串鏈接符號 
如何打開指定的文件夾? 
解  決 (2010.3.11): 
Run(「explorer c:\program files」) 
Run(「explorer /e,c:\program files」) ,以「資源管理器」的方式打開指定的文件夾 
17.如何用ControlCommand去掉軟件安裝中的某插件或快捷方式? 
語法:ControlCommand ( "窗口標題", "窗口文本", 控件ID, "命令", "選項") 
18.打開記事本自動輸入定製內容後在自動關閉記事本程序? 
原碼: 
Run('notepad.exe') 
WinWait("無標題 - 記事本","") 
WinWaitActive("無標題 - 記事本","") 
Send("自動向記事本輸入指定內容後並自動關閉它") 
WinClose("無標題 - 記事本","") 
WinWait("記事本","") 
WinWaitActive("記事本","") 
Send('&n') 
錯誤:將winclose放到最後一行,那確定不對,先要關閉記事本後纔出現「是否存儲內容」的窗口。 
19.winzip自動化安裝遇到的問題? 

錯誤:捕捉到的「標題」是WinZip&reg; 14.0 Setup,可是複製到編輯器@變成了? ,這樣在winwaitactive中沒有成功捕捉到該窗口,controlclick  Setup固然錯誤。 
20.建立GUI截面遇到的關於」 「和「」的錯誤? 
原碼: 
#include <GUIConstants.au3> 

GUICreate("GUI圖形窗口",200,100) 
GUICtrlCreateLabel("鄒國奎建立",20,20,70) 
$okButton=GUICtrlCreateButton("還OK吧",40,40,60) 
GUISetState(@SW_SHOW) 

While 1 
        $msg=GUIGetMsg() 
         
        Select 
      Case $msg=$GUI_EVENT_CLOSE 
            MsgBox(0,"GUIs事件","你選擇了關閉!正在退出") 
      Case $msg=$okButton 
            MsgBox(0, "GUI 事件", "您按下了「還OK吧」按鈕!") 
        ExitLoop 
    EndSelect 
Wend 
注意:紅色的「還OK吧」,不該該是在英文狀態輸入的」 「。 
21.學習GUI的onEvent模式遇到的問題? 
代碼以下: 
#include <GUIConstants.au3> 
Opt("GUIonEventMode",1) 
$mainwindow=GUICreate("主窗口-鄒國奎",200,100,200,100) 
GUISetOnEvent($gui_event_close,"CLOSEClick") 
GUICtrlCreateLabel("最近過的如何!",10,20) 
$Button=GUICtrlCreateButton("還OK!",20,40,60) 
GUICtrlSetOnEvent($Button,"BUTTON") 

$secondwindow=GUICreate("這是一個測試的非主窗口,不會顯示",200,100) 
GUISetOnEvent($gui_event_close,"CLOSEClick") 

GUISwitch($mainwindow) 
GUISetState(@SW_SHOW) 
;GUISetState(@SW_SHOW,$mainwindow)也能夠 
While 1 
        Sleep(1000) 
WEnd 

Func BUTTON() 
        MsgBox(0,"GUI事件","你按下了「還OK!」按鈕") 
EndFunc 

Func CLOSEClick() 
        If @GUI_WinHandle=$mainwindow Then 
                MsgBox(0,"GUI事件","你選擇了關閉主窗口,正在關閉中...") 
                Exit 
                 
        EndIf 
EndFunc 
注意紅色部分,我點擊按鈕事件沒反應啊?原來我是用了GUISetonEvent,而按鈕是控件應該是GUICtrlSetonEvent()啊!機械學習不靈活呀! 
22.使用#include屢次包含同一個自定義的AU3文件錯誤? 
代碼以下: 
;;; 下面是腳本 TIME.AU3 的代碼 ;;; 
MsgBox(0,"", "如今時間是: " & @HOUR & ":" & @MIN & ":" & @SEC) 

;;; 下面是腳本 SCRIPT.AU3 的代碼 ;;; 
#include "TIME.AU3" 
MsgBox(0,"", "示例") 
#include "TIME.AU3" 
Exit 

; 運行 script.au3 將會輸出如下三個消息框: 
; 第一個報時,第二個是「示例」,第三個也是報時。 
注意:在SCRIPT.AU3中使用#include屢次包含TIME.AU3時,要在被包含的TIME.AU3文件頭部添加#inclued-once,即 
;;; 下面是腳本 TIME.AU3 的代碼 ;;; 
#inclued-once 
MsgBox(0,"", "如今時間是: " & @HOUR & ":" & @MIN & ":" & @SEC) 
;若是不加#include-once,會發生TIME.AU3已經包含錯誤提示,但「繼續執行」一樣會輸出3個消息框 
代碼補充: 
;;; 下面是腳本 LIBRARY.AU3 的代碼 ;;; 
#include-once 

Func myFunc() 
    MsgBox(0,"", "此對話框由 library.au3 內的函數調出") 
EndFunc 

;;; 下面是腳本 SCRIPT.AU3 的代碼 ;;; 
#include "Library.au3" 
#include "Library.au3"  ;若LIBRARY.AU3爲使用 #include-once指令則會拋出一個錯誤 

MsgBox(0, "示例", "此對話框從 script.au3 中調出") 
myFunc() 
Exit 
; 運行 script.au3 將會輸出如下兩個消息框: 
; 第一個是「此對話框從 script.au3 中調出」 
; 第二個是「此對話框由 library.au3 內的函數調出」 
注意:雖然在script.au3中2次使用#include "Library.au3",但在執行script.au3時,只彈出2個信息框,說明「自定義函數-myFunc()」只用在被調用時才執行其特定的功能。 
遺留問題:在scirpt.au3中的多個#include "Library.au3"是否是每個都執行了呢?若是將以上代碼改爲 
;;; 下面是腳本 LIBRARY.AU3 的代碼 ;;; 
#include-once 
MsgBox(0,"", "此對話框由 library.au3 內的函數調出") 
Func myFunc() 
    MsgBox(0,"", "此對話框由 library.au3 內的函數調出") 
EndFunc 

;;; 下面是腳本 SCRIPT.AU3 的代碼 ;;; 
#include "Library.au3" 
MsgBox(0, "示例", "此對話框從 script.au3 中調出") 
#include "Library.au3"  ;若LIBRARY.AU3爲使用 #include-once指令則會拋出一個錯誤 
myFunc() 
Exit 
那麼仍是顯示2個消息框分別是: 
"此對話框由 library.au3 內的函數調出"和"此對話框從 script.au3 中調出",感受script.au3中第1個#include "Library.au3"執行了,可後一個#include "Library.au3" 和myFunc()沒起做用啊??? 
23.交換數據錯誤? 
代碼以下: 
dim $first=1,$second=2 
swap($first,$second) 
msgbox(0,"$first和$second交換後: ","$first= " &  $first) 
func swap( $x, $y) 
local $t 
$t=$x 
$x=$y 
$y=$t 
endfunc 
注意:沒法完成交換,改爲func swap(ByRef $x,ByRef $y)則能夠完成交換,ByRef指定函數swap()所接受的參數必須是變量且能夠被函數swap()修改。 
知識補充: 
主體程序的參數是實際參數,函數中的參數是形式參數。它們之間的值傳遞有2中形式:值傳遞和址傳遞。 
若是不加ByRef,就是值傳遞,至關於主體參數將它的值傳遞給形式參數後,他們就沒有任何關係了 ,不管形式參數怎麼交換都不會影響實際參數的值,因此沒法實現交換。 
址傳遞是將表明變量的內存空間的地址進行傳遞,就好象映射同樣,修改了形式參數,他所對應的實際參數也會變化。 

24.for…next問題? 
代碼以下: 
For 1 To $y Step 1 
MsgBox(0,"顯示尋麻疹文檔內容:",$x) 
Next 
注意:For <控制變量> = <初始值> To <終值> [Step <步長>],基礎不牢啊! 
25.soundplay(「music」,0)任務欄的AU3圖標一閃而過,將0改1就OK!0是不等歌曲播完直接執行下一語句,可下面什麼都沒有因此就退出了,1則是等歌曲播放完再退出。不細心看幫助啊!!! 
26.關於@error的困惑? 
代碼以下: 
$var = IniReadSection("C:\Temp\myfile.ini", "section2") 
If @error Then  
    MsgBox(4096, "", "發生錯誤,可能目標文件並不是標準的INI文件.") 
Else 
    For $i = 1 To $var[0][0] 
        MsgBox(4096, "", "關鍵字:" & $var[$i][0] & @CRLF & "數值:" & $var[$i][1]) 
    Next 
EndIf 
注意:總把 if @error 當成 if @error=0,0固然是沒錯誤,實際它是「若是有錯怎麼怎麼樣」,IniReadSection()讀取的返回的數組元素的數量默認都存儲到$var[0][0]是規定! 
27.GUICtrlCreateAVI()的問題? 
注意:不支持有聲AVI文件。 
外置的同樣能夠。可是網上的視頻AVI又不行。鬱悶。AU3安裝目錄自帶的卻行。 
緣由還在研究中。可是能夠不用GUICtrlCreateAvi 
直接用GUICtrlCreateObj。只是這個加載對象的,運行程序的時候感受有點慢。 
找到緣由了。。。幫助沒說明GUICtrlCreateAvi ()  

上MSDN才查到緣由。而幫助裏邊_GUICtrlAVI_Open才說有。FUCK 

GUICtrlCreateAvi () 與_GUICtrlAVI_Open是同樣不支持有聲AVI的。 

MSND說明: 
Open does not support sound in an AVI clip; you can open only silent AVI clips. 

兩個都是隻支持無聲AVI,有聲的用ObjCreate("WMPlayer.OCX")吧。
編程

newuser 發表於 2010-8-18 10:55windows

[b]回覆 [url=http://www.autoitx.com/redirect.php?goto=findpost&pid=196307&ptid=17702]4#[/url] [i]newuser[/i] [/b] 
28.for…next從1加到100的問題? 
代碼以下: 
Dim $Sum,$i 
$Sum=0 
$i=1 
For $i=1 To 100  [Step 1] 
        $Sum=$Sum+$i 
Next 
MsgBox(0,"從1一直加到100","總和:"&$Sum) 
個人錯誤:在for循環內又加了 個$i=$i+1,真是多餘+錯誤,for自己已經加了嗎 ! 
29.ToolLip居中顯示:ToolTip("測試ToolLip居中顯示文字", @DesktopWidth/2 -100, @DesktopHeight/2 -100,"正在執行安裝...") 
30.random()取隨機數? 
#include <array.au3> 
;在1-100之間隨機的取出10個數並比較大小 
Dim  $Num=11 ;定義數組的下標 
Dim  $i,$RadomArray[$Num] 
Dim  $Min,$Max 
For $i=1  To $Num-1 
        $RadomArray[$i]=Random(1,100,1) 
Next 
_ArrayDisplay($RadomArray,"顯示1-100之間的隨機數") 
;Random(最小值,最大植,flag) flag默認取」浮點數「,設置爲1,取整數 
$Min=$RadomArray[1] 
$Max=$RadomArray[1] 
For $i=2 To $Num-1 
        If $RadomArray[$i]>$Max  Then 
                $Max=$RadomArray[$i] 
        EndIf 
        If  $RadomArray[$i]<$Min Then 
                $Min=$RadomArray[$i] 
        EndIf 
Next 
MsgBox (0,"顯示 1-100之間最小和最大的隨即數","最小的隨機數是:"&$Min&@CRLF&"最大的隨機數是:"&$Max) 
31.生成10個不重複的隨機數?從小到大顯示隨機數? 
;在1-10生成不重複的10個隨機數 
#include <array.au3> 
Const $N=11 ;定義數組的下標,由於要選10個隨機數,因此下標爲11 
Dim $RadomArray[$N] ;定義隨機數組 
Dim $Num ;判斷生成的隨機數是否相同中間過分變量 
Dim $i,$j ;用於2個循環使用的中間過分變量 
Dim $Flag ;用於斷定是否有生成相同隨機數的標誌變量,0表示沒有 
$i=1 
While $i<$N ;當條件成立,進入第1層循環 
        $Num=Random(1,10,1) ;首先生成1個隨機數 
        $Flag=0 ;由於目前只有1個隨機數,因此$Flag=0 
        $j=1  ;賦值$j,爲 進入 第2個循環設置初始條件 
        While $j<$i ;斷定進入第2個循環是否符合條件,首次確定不執行,由於$i=$j,因此直接跳入到下一個 if判斷語句 
                If $Num=$RadomArray[$j] Then 
                        $Flag=1 
                        ExitLoop 
                Else 
                        $j +=1 
                EndIf 
        WEnd 
        If  $Flag=0 Then  ;首次$Flag確定爲0 
                $RadomArray[$i]=$Num   ;成功爲隨機數組元素進行第1次賦值 
                $i +=1 ;成功首次賦值後,第1個循環的中間過分變量加1,進行第2次的第1層循環 
        EndIf 
WEnd 
_ArrayDisplay($RadomArray,"顯示不重複的隨機數") 
;當$i=2時,符合第1層循環條件,進入第1層循環,再次生成第2個隨機數$Num 
;當$i=2時,$j<$i符合進入第2層循環,將以前的已生成的第1個$RandomArray[1]與新生成的第2個$Num比較,若是相同$Flag爲1, 
;退出第2層循環從新生成第2個$Num,不然$j加1破壞第2層的循環條件$j<$i返回到第1層循環,在進入下一個if 判斷,繼續爲隨機數組  
;增長新的元素,此時的$j=2,$i=3 
;剩下依次類推 
For $i=1 To $N-2 
        For $j=$i+1 To $N-1 ;精華所在 $j=$i+1,若是寫成$j=2則不能完成從小到大的排序 
                If $RadomArray[$i]>$RadomArray[$j] Then 
                        $Temp=$RadomArray[$i] 
                        $RadomArray[$i]=$RadomArray[$j] 
                        $RadomArray[$j]=$Temp 
                EndIf 
        Next 
Next 
_ArrayDisplay($RadomArray,"從小到大顯示隨機數") 
以函數完成上述功能: 
#include <array.au3> 
Local $RadomArray 
$RadomArray=CreateRadomArray() 
_ArrayDisplay($RadomArray) 
$RadomArray=SortRadomArray($RadomArray) 
_ArrayDisplay($RadomArray) 

Func CreateRadomArray() 
        Local $N=11 
        Local $RadomArray[$N] 
        Local $i,$j,$Num,$Flag 
        $i=1 
        While $i<$N 
                $Num=Random(1,20,1) 
                $Flag=0 
                $j=1 
                While $j<$i  
                        If $Num=$RadomArray[$j] Then 
                                $Flag=1 
                                ExitLoop 
                        Else 
                                $j +=1 
                        EndIf 
                WEnd 
                If $Flag=0 Then 
                        $RadomArray[$i]=$Num 
                        $i +=1 
                EndIf 
        WEnd 
        $RadomArray[0]=10 
        Return($RadomArray)                 
EndFunc 

Func SortRadomArray($Array) 
        Local $i,$j,$t   
        For $i=1 To $Array[0]-1 
                For $j=$i+1 To $Array[0] 
                        If $Array[$i]>$Array[$j] Then  
                                $t=$Array[$i] 
                                $Array[$i]=$Array[$j] 
                                $Array[$j]=$t 
                        EndIf 
                Next 
        Next 
$Array[0]="" ;爲何要將它置空呢?如不置空,將沒法實現排序 
;哎!該數組下標是存放數組元素的個數的,不須要參與到排序當中,死教條不靈活! 
        Return($Array) 
EndFunc 
32.設計一個GUI並設置了背景PIC控件,但GUI上的BUTTON控件無反應的緣由? 
答:錯誤:$background = GUICtrlCreatePic("F:\兒子背景照片\080402069.jpg", 0, 0, 400, 400) 
注意GuiCtrlCreatePIC()的語法,沒有進行PIC控件「樣式」的編輯: 
如下是我幫你找的幫助資料,但願你能理解,其實我也不很理解,跟着學習!  
1.        $background = GUICtrlCreatePic("F:\兒子背景照片\080402069.jpg", 0, 0, 400, 400, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))         
2.        ;$SS_NOTIFY:使按鈕發送 BN_KILLFOCUS(取消焦點) 與 BN_SETFOCUS(設置焦點) 通知消息到父窗口. 注意不論按鈕是否有這個樣式,都能發送 BN_CLICKED 單擊通知消息.  
3.        ;要獲取 BN_DBLCLK 雙擊通知消息, 按鈕必須有 BS_RADIOBUTTON 或 BS_OWNERDRAW 樣式. 
4.        ;$WS_GROUP:指定控件組的第一個控件.控件組由第一個控件和其後定義的全部控件組成,一直到下一個控件帶有 WS_GROUP 樣式爲止. 
5.        ;$WS_CLIPSIBLINGS:剪輯子窗口相互對齊; 也就是說, 當某一子窗口收到 WM_PAINT 消息時, 此樣式將剪輯全部其餘子窗口重疊區域 
6.        ;並更新子窗口. 若是未指定子窗口重疊, 這是有可能的, 在需繪製客戶區域子窗口時, 只繪製客戶區域臨近的子窗口. 
個人理解是他起了做用(不知道是否正確?): 
$SS_NOTIFY:使按鈕發送 BN_KILLFOCUS(取消焦點) 與 BN_SETFOCUS(設置焦點) 通知消息到父窗口. 注意不論按鈕是否有這個樣式,都能發送 BN_CLICKED 單擊通知消息.  ---按鈕能夠得到焦點,而若是背景PIC控件不這樣設置,BUTTON控件就沒法得到焦點,天然就沒法響應! 
第2中解決方法:在$background = GUICtrlCreatePic("F:\ 080402069.jpg", 0, 0, 400, 400下一行加入:  GUICtrlSetState(-1,$gui_DISABLE)也能解決。 
GuiCtrlSetState(控件ID,狀態) 
GuiCtrlSetState(-1,$gui_DISABLE)  :-1本例指PIC控件,若是該行放到BUTTON控件下一行就是指 
BUTTON,$gui_DISABLE是把控件變成灰色不可用。 
AutoIt基礎實踐練習筆記二 

Cy10-ZouGuoKui 2010-4-21,新起點新加油! 

1.我要自動給系統打補丁 
示例1: 
#include <File.au3> 
$FileList = _FileListToArray(@ScriptDir & "\Update", "*.exe", 1);列出當前路徑下的Update目錄 
;下的全部.exe文件 
;語法  _FileListToArray($sPath[,$sFilter=」*」[,$iFlag=0]]) 
;列出指定路徑既 $sPath下的文件和文件夾 
;$sFilter 可選過濾器,默認是 * ,本例是 *.exe 
;$iFlag 返回標誌,0 是文件和文件夾都返回,1是僅返回文件,2是文件夾 
;@error爲1,找不到指定路徑或路徑非法,爲4是找不到文件 
;@error 爲2,$sFilter不可用,爲3 $iFlag不可用 
If @error = 1 Then 
        MsgBox(0, '', '沒有找到文件夾,點擊肯定後自動建立') 
        DirCreate(@ScriptDir & '\Update') 
        Exit 
EndIf 
If @error = 4 Then 
        MsgBox(0, '', '錯誤 文件夾中沒有文件,清將補丁文件放入update文件夾') 
        Exit 
EndIf 
For $i = 3 To 1 Step -1 
        ToolTip(@CR & "  共" & $FileList[0] & "個系統補丁," & $i & "秒後開始安裝...   " & @CR, @DesktopWidth - 260, @DesktopHeight - 100) 
        Sleep(1000) 
Next 
For $i = 1 To $FileList[0] 
        ToolTip(@CR & "  正在安裝 " & $FileList[$i] & " (" & $i & "/" & $FileList[0] & ")   " & @CR, @DesktopWidth - 400, @DesktopHeight - 100) 
; $FileList[$i] & " (" & $i & "/" & $FileList[0] & ")顯示什麼補丁第幾個安裝,美化窗口 
        RunWait(@ScriptDir & "\Update\" & $FileList[$i] & " /quiet /passive /norestart") 
Next 
ToolTip(@CR & "  系 統 補 丁 安 裝 完 畢 !  " & @CR, @DesktopWidth - 260, @DesktopHeight - 100) 
Sleep(2000) 
示例2:照貓畫虎 
#include <File.au3> 
Dim $iRecords 
If Not _FileReadToArray("PatchsList.txt",$iRecords) Then 
;_FileReadToArray($FilePath,ByRef $aArray) 
;將指定路徑的文件內容讀取到 指定數組中  
        MsgBox(0,"發現錯誤","沒法讀取指定文件內容") 
        Exit 
EndIf 
For $i = 3 To 1 Step -1 
        ToolTip(@CR & "  共" & $iRecords[0] & "個系統補丁," & $i & "秒後開始安裝...   " & @CR, @DesktopWidth - 260, @DesktopHeight - 100) 
        Sleep(1000) 
Next 
For $i=1 To $iRecords[0]  
        ToolTip(@CR & "  正在安裝 " & $iRecords[$i] & " (" & $i & "/" & $iRecords[0] & ")   " & @CR, @DesktopWidth - 400, @DesktopHeight - 100) 
        RunWait(@ScriptDir & "\Update\" & $iRecords[$i] & " /quiet /passive /norestart") 
Next 
ToolTip(@CR & "  系 統 補 丁 安 裝 完 畢 !  " & @CR, @DesktopWidth - 260, @DesktopHeight - 100) 
示例3:從指定網站下載補丁列表文件 
;到指定網站下載指定目錄下的文件 
#Alternate 
Local $DownLoadFile=InetGet("http://10.64.240.23:801/patchs/PatchsList.txt","patchslist.txt",1,1)  
;定義變量$DownLoadFile接受IneGet返回的句柄信息 
Do 
        Sleep(250) 
Until  InetGetInfo($DownLoadFile,2) ;檢查下載是否完成 
Local $DataInfo=InetGetInfo($DownLoadFile) 
MsgBox(0,"顯示相關下載信息","正在讀取的字節: " & $DataInfo[0] & @CRLF & _ 
        "下載文件的大小: " &  $DataInfo[1] & @CRLF & _ 
                "下載是否完成?true表示文件下載過程完成:  "  & $DataInfo[2] & @CRLF & _ 
                "下載是否成功完成?true表示文件所有下載完畢:  "  & $DataInfo[3] & @CRLF) 
2.我要本身製做系統工具? 
示例1:消息模式版 GUIGetMsg() 
;問題1:加上 Opt("GUIOnEventMode",1) 全部按鈕都很差使? 
;答:看到hynq2000說事件模式效率高,就簡單的加上該語句,但是本身下面的循環判斷是消息模式啊!固然致使全部按鈕很差使啊!!! 
;    將用於循環判斷的語句寫成Func()形式,就能夠用事件模式了。 
#include <ButtonConstants.au3> 
#include <EditConstants.au3> 
#include <GUIConstantsEx.au3> 
#include <StaticConstants.au3> 
#include <WindowsConstants.au3> 
#Region ### START Koda GUI section ### Form= 
$Form1 = GUICreate("系統工具集 ", 631, 454, 192, 114) 
$Group1 = GUICtrlCreateGroup(".exe類", 48, 32, 169, 305) 
$Button2 = GUICtrlCreateButton("Windows更新程序", 64, 56, 137, 33) 
$Button3 = GUICtrlCreateButton("遠程桌面", 64, 96, 137, 33) 
$Button4 = GUICtrlCreateButton("系統信息", 64, 136, 137, 33) 
$Button5 = GUICtrlCreateButton("文件簽名驗證程序", 64, 176, 137, 33) 
$Button6 = GUICtrlCreateButton("任務管理器", 64, 216, 137, 33) 
$Button7 = GUICtrlCreateButton("系統配置實用程序", 64, 256, 137, 33) 
$Button8 = GUICtrlCreateButton("磁盤垃圾清理", 64, 296, 137, 33) 
GUICtrlCreateGroup("", -99, -99, 1, 1) 
$Group2 = GUICtrlCreateGroup(".msc類", 232, 32, 169, 305) 
$Button9 = GUICtrlCreateButton("本地服務設置", 248, 56, 137, 33) 
$Button10 = GUICtrlCreateButton("共享文件夾管理器", 248, 96, 137, 33) 
$Button11 = GUICtrlCreateButton("磁盤碎片整理", 248, 136, 137, 33) 
$Button12 = GUICtrlCreateButton("計算機管理", 248, 176, 137, 33) 
$Button13 = GUICtrlCreateButton("磁盤管理", 248, 216, 137, 33) 
$Button14 = GUICtrlCreateButton("本地安全設置", 248, 256, 137, 33) 
$Button15 = GUICtrlCreateButton("設備管理器", 248, 296, 137, 33) 
GUICtrlCreateGroup("", -99, -99, 1, 1) 
$Group3 = GUICtrlCreateGroup(".cpl類(控制面板)", 416, 32, 169, 305) 
$Button16 = GUICtrlCreateButton("系統屬性", 432, 56, 137, 33) 
$Button17 = GUICtrlCreateButton("用戶賬戶", 432, 96, 137, 33) 
$Button18 = GUICtrlCreateButton("自動更新", 432, 136, 137, 33) 
$Button19 = GUICtrlCreateButton("網絡鏈接", 432, 176, 137, 33) 
$Button20 = GUICtrlCreateButton("區域和語言選項", 432, 216, 137, 33) 
$Button21 = GUICtrlCreateButton("添加/刪除程序", 432, 256, 137, 33) 
$Button22 = GUICtrlCreateButton("Internet屬性", 432, 296, 137, 33) 
GUICtrlCreateGroup("", -99, -99, 1, 1) 
$Group4 = GUICtrlCreateGroup("以上工具也可經過運行執行", 48, 352, 537, 65) 
$Input1 = GUICtrlCreateInput("", 64, 376, 337, 21) 
$Button1 = GUICtrlCreateButton("運行", 416, 368, 105, 33) 
GUICtrlCreateGroup("", -99, -99, 1, 1) 
$Label1 = GUICtrlCreateLabel("感謝hynq2000!僅爲練手使用---採十青青橄欖  2010.4.27", 216, 424, 320, 66) 
$Group5 = GUICtrlCreateGroup("", 32, 20, 569, 455) 
GUICtrlCreateGroup("", -99, -99, 1, 1) 
GUICtrlSetState(-1, $GUI_DISABLE) 
GUISetState(@SW_SHOW) 
#EndRegion ### END Koda GUI section ### 

While 1 
        $nMsg = GUIGetMsg() 
        Switch $nMsg 
                Case $GUI_EVENT_CLOSE 
                        Exit 
                Case $Button2 ;開始執行系統的exe文件,通常它們都在  \system32目錄下 
                        Run(@SystemDir&"\wupdmgr.exe")  
                Case $Button3 
                        Run(@SystemDir&"\mstsc.exe") 
                Case $Button4 
                        Run(@SystemDir&"\winmsd.exe") 
                Case $Button5 
                        Run(@SystemDir&"\sigverif.exe") 
                Case $Button6 
                        Run(@SystemDir&"\taskmgr.exe") 
                Case $Button7 
                        Run(@WindowsDir&"\pchealth\helpctr\binaries\Msconfig.exe") ;msconfig命令不在\system32目錄下 
                        ;Run(@SystemDir&"\tsshutdn.exe") 它是60秒倒計時關機命令 
                Case $Button8 
                        Run(@SystemDir&"\cleanmgr.exe") 
                Case $Button9 ;開始執行系統的msc文件,通常它們都在  \system32目錄下,經過shellexecute執行它們 
                        ShellExecute(@SystemDir&"\services.msc") 
                Case $Button10 
                        ShellExecute(@SystemDir&"\fsmgmt.msc") 
                Case $Button11 
                        ShellExecute(@SystemDir&"\dfrg.msc") 
                Case $Button12 
                    ShellExecute(@SystemDir&"\compmgmt.msc") 
                Case $Button13 
                        ShellExecute(@SystemDir&"\diskmgmt.msc") 
                Case $Button14 
                        ShellExecute(@SystemDir&"\secpol.msc") 
                Case $Button15 
                        ShellExecute(@SystemDir&"\devmgmt.msc") 
                Case $Button16 ;開始執行系統的cpl文件,通常它們都在  \system32目錄下,經過control來執行.cpl文件 
                        Run("control sysdm.cpl") 
                Case $Button17 
                        Run("control userpasswords2") 
                        ;Run("control nusrmgr.cpl"),不知道爲何它很差使! 
                Case $Button18 
                        Run("control wuaucpl.cpl") 
                Case $Button19 
                        Run("control ncpa.cpl") 
                Case $Button20 
                        Run("control intl.cpl") 
                Case $Button21 
                        Run("control appwiz.cpl") 
                Case $Button22 
                        Run("control inetcpl.cpl") 
                Case $Button1 ;執行 「運行」 按鈕 
                        Run('cmd /c'&GUICtrlRead($input1)) 
                        ;RunWait(@ComSpec&" /c "&GUICtrlRead($Input1)) ;參數  /c 表示要執行後面的「命令字符串」,而字符串是來自控件$input1內的內容 
                        ;問題2:輸入 msconfig 怎麼不執行呢? 
                        ;答:笨蛋!它不在/system32目錄下,必須輸入絕對路徑才能執行,要否則再修改Path把msconfig所在的目錄也加上 
                        ;問題3:如何執行tasklist後讓出現的窗口定住呢?Run('cmd /c pause')只是又打開一個DOS的暫停窗口啊? 
                        ;答:其實在$input1內輸入「tasklist & pause"就實現了,不過這仍是DOS啊! 
                        ;cmd /V:ON  啓用「延遲變量」的意思! 
        EndSwitch 
WEnd 
示例2:事件模式響應版 Switch @GUI_CtrlID 
#Region ;**** 參數建立於 ACNWrapper_GUI **** 
#AutoIt3Wrapper_UseUpx=n 
#AutoIt3Wrapper_Au3Check_Stop_OnWarning=y 
#AutoIt3Wrapper_Run_Tidy=y 
#Obfuscator_Parameters=/striponly 
#EndRegion ;**** 參數建立於 ACNWrapper_GUI **** 
;######密碼版的系統工具#################### 
;問題1:爲何不加While循環,界面會一閃而過?---感謝水木子 
;答:若是不加While循環,代碼一直執行到完畢,界面確定一閃而過, 
;    而且水木子老師建議不要sleep(1),那樣延遲時間短執行過快CPU會受不了的!這都是經驗啊! 

;進行密碼驗證 
_CheckPassWords() 

Opt("GUIOnEventMode", 1) ;採用事件模式響應 
#include <ButtonConstants.au3> 
#include <EditConstants.au3> 
#include <GUIConstantsEx.au3> 
#include <StaticConstants.au3> 
#include <WindowsConstants.au3> 
#Region ### START Koda GUI section ### Form= 

$Form1 = GUICreate("系統工具集 ", 631, 454, 192, 114) 
$Group1 = GUICtrlCreateGroup(".exe類", 48, 32, 169, 305) 
$Button2 = GUICtrlCreateButton("Windows更新程序", 64, 56, 137, 33) 
$Button3 = GUICtrlCreateButton("遠程桌面", 64, 96, 137, 33) 
$Button4 = GUICtrlCreateButton("系統信息", 64, 136, 137, 33) 
$Button5 = GUICtrlCreateButton("文件簽名驗證程序", 64, 176, 137, 33) 
$Button6 = GUICtrlCreateButton("任務管理器", 64, 216, 137, 33) 
$Button7 = GUICtrlCreateButton("系統配置實用程序", 64, 256, 137, 33) 
$Button8 = GUICtrlCreateButton("磁盤垃圾清理", 64, 296, 137, 33) 
GUICtrlCreateGroup("", -99, -99, 1, 1) 
$Group2 = GUICtrlCreateGroup(".msc類", 232, 32, 169, 305) 
$Button9 = GUICtrlCreateButton("本地服務設置", 248, 56, 137, 33) 
$Button10 = GUICtrlCreateButton("共享文件夾管理器", 248, 96, 137, 33) 
$Button11 = GUICtrlCreateButton("磁盤碎片整理", 248, 136, 137, 33) 
$Button12 = GUICtrlCreateButton("計算機管理", 248, 176, 137, 33) 
$Button13 = GUICtrlCreateButton("磁盤管理", 248, 216, 137, 33) 
$Button14 = GUICtrlCreateButton("本地安全設置", 248, 256, 137, 33) 
$Button15 = GUICtrlCreateButton("設備管理器", 248, 296, 137, 33) 
GUICtrlCreateGroup("", -99, -99, 1, 1) 
$Group3 = GUICtrlCreateGroup(".cpl類(控制面板)", 416, 32, 169, 305) 
$Button16 = GUICtrlCreateButton("系統屬性", 432, 56, 137, 33) 
$Button17 = GUICtrlCreateButton("用戶賬戶", 432, 96, 137, 33) 
$Button18 = GUICtrlCreateButton("自動更新", 432, 136, 137, 33) 
$Button19 = GUICtrlCreateButton("網絡鏈接", 432, 176, 137, 33) 
$Button20 = GUICtrlCreateButton("區域和語言選項", 432, 216, 137, 33) 
$Button21 = GUICtrlCreateButton("添加/刪除程序", 432, 256, 137, 33) 
$Button22 = GUICtrlCreateButton("Internet屬性", 432, 296, 137, 33) 
GUICtrlCreateGroup("", -99, -99, 1, 1) 
$Group4 = GUICtrlCreateGroup("以上工具也可經過運行執行", 48, 352, 537, 65) 
$Input1 = GUICtrlCreateInput("", 64, 376, 337, 21) 
$Button1 = GUICtrlCreateButton("運行", 416, 368, 105, 33) 
GUICtrlCreateGroup("", -99, -99, 1, 1) 
$Label1 = GUICtrlCreateLabel("感謝hynq2000!僅爲練手使用---採十青青橄欖  2010.4.27", 216, 424, 320, 66) 
$Group5 = GUICtrlCreateGroup("", 32, 20, 569, 455) 
GUICtrlCreateGroup("", -99, -99, 1, 1) 
GUICtrlSetState(-1, $GUI_DISABLE) 
GUISetState(@SW_SHOW) 
#EndRegion ### END Koda GUI section ### 

;###########進行事件關聯############## 
GUISetOnEvent($gui_event_close, "_Exit") ;錯誤:將  $ 寫成 @ 
GUICtrlSetOnEvent($Button2, "_SysTools") ;點擊$Button2,函數_SysTools響應,注意,不須要書寫_SysTools(),並且要用" "將函數括起來 
GUICtrlSetOnEvent($Button3, "_SysTools") ;另外注意是GUICtrlSetOnEvent(),不是GUISetOnEvent(),人家但是控件啊 ! 
GUICtrlSetOnEvent($Button4, "_SysTools") 
GUICtrlSetOnEvent($Button5, "_SysTools") 
GUICtrlSetOnEvent($Button6, "_SysTools") 
GUICtrlSetOnEvent($Button7, "_SysTools") 
GUICtrlSetOnEvent($Button8, "_SysTools") 
GUICtrlSetOnEvent($Button9, "_SysTools") 
GUICtrlSetOnEvent($Button10, "_SysTools") 
GUICtrlSetOnEvent($Button11, "_SysTools") 
GUICtrlSetOnEvent($Button12, "_SysTools") 
GUICtrlSetOnEvent($Button13, "_SysTools") 
GUICtrlSetOnEvent($Button14, "_SysTools") 
GUICtrlSetOnEvent($Button15, "_SysTools") 
GUICtrlSetOnEvent($Button16, "_SysTools") 
GUICtrlSetOnEvent($Button17, "_SysTools") 
GUICtrlSetOnEvent($Button18, "_SysTools") 
GUICtrlSetOnEvent($Button19, "_SysTools") 
GUICtrlSetOnEvent($Button20, "_SysTools") 
GUICtrlSetOnEvent($Button21, "_SysTools") 
GUICtrlSetOnEvent($Button22, "_SysTools") 
GUICtrlSetOnEvent($Button1, "_SysTools") 
;###########事件關聯完畢############## 

;###########進入############## 
;注意:沒有這個循環,界面是一閃而過 
While 1 
        Sleep(250) 
WEnd 
;###########主循環完畢############## 
;###########定義響應事件的函數############## 
Func _SysTools() 
        Switch @GUI_CtrlId ;這是事件模式,別忘了消息模式是 Switch @GUIGetMsg() 
                Case $Button2 ;開始執行系統的exe文件,通常它們都在  \system32目錄下 
                        Run(@SystemDir & "\wupdmgr.exe") 
                Case $Button3 
                        Run(@SystemDir & "\mstsc.exe") 
                Case $Button4 
                        Run(@SystemDir & "\winmsd.exe") 
                Case $Button5 
                        Run(@SystemDir & "\sigverif.exe") 
                Case $Button6 
                        Run(@SystemDir & "\taskmgr.exe") 
                Case $Button7 
                        Run(@WindowsDir & "\pchealth\helpctr\binaries\Msconfig.exe") ;msconfig命令不在\system32目錄下 
                        ;Run(@SystemDir&"\tsshutdn.exe") 它是60秒倒計時關機命令 
                Case $Button8 
                        Run(@SystemDir & "\cleanmgr.exe") 
                Case $Button9 ;開始執行系統的msc文件,通常它們都在  \system32目錄下,經過shellexecute執行它們 
                        ShellExecute(@SystemDir & "\services.msc") 
                Case $Button10 
                        ShellExecute(@SystemDir & "\fsmgmt.msc") 
                Case $Button11 
                        ShellExecute(@SystemDir & "\dfrg.msc") 
                Case $Button12 
                        ShellExecute(@SystemDir & "\compmgmt.msc") 
                Case $Button13 
                        ShellExecute(@SystemDir & "\diskmgmt.msc") 
                Case $Button14 
                        ShellExecute(@SystemDir & "\secpol.msc") 
                Case $Button15 
                        ShellExecute(@SystemDir & "\devmgmt.msc") 
                Case $Button16 ;開始執行系統的cpl文件,通常它們都在  \system32目錄下,經過control來執行.cpl文件 
                        Run("control sysdm.cpl") 
                Case $Button17 
                        Run("control userpasswords2") 
                        ;Run("control nusrmgr.cpl"),不知道爲何它很差使! 
                Case $Button18 
                        Run("control wuaucpl.cpl") 
                Case $Button19 
                        Run("control ncpa.cpl") 
                Case $Button20 
                        Run("control intl.cpl") 
                Case $Button21 
                        Run("control appwiz.cpl") 
                Case $Button22 
                        Run("control inetcpl.cpl") 
                Case $Button1 ;執行 「運行」 按鈕 
                        Run('cmd /c' & GUICtrlRead($Input1)) ;剛開始,$Button1就是沒有反映,原來是忘記將其進行事件關聯了 
                        ;RunWait(@ComSpec&" /c "&GUICtrlRead($Input1)) ;參數  /c 表示要執行後面的「命令字符串」,而字符串是來自控件$input1內的內容 
                        ;問題2:輸入 msconfig 怎麼不執行呢? 
                        ;答:笨蛋!它不在/system32目錄下,必須輸入絕對路徑才能執行,要否則再修改Path把msconfig所在的目錄也加上 
                        ;問題3:如何執行tasklist後讓出現的窗口定住呢?Run('cmd /c pause')只是又打開一個DOS的暫停窗口啊? 
                        ;答:其實在$input1內輸入「tasklist & pause"就實現了,不過這仍是DOS啊! 
                        ;cmd /V:ON  啓用「延遲變量」的意思! 
        EndSwitch 
EndFunc   ;==>_SysTools 
;###########響應事件的函數結束############## 
;###########定義驗證密碼的函數############## 
Func _CheckPassWords() 
        Local $MyPassWords = "MynameisZGK" 
        $InputPassWords = InputBox("密碼驗證", "請輸入密碼:", "", "*", 200, 100, @DesktopWidth - 600, @DesktopHeight - 450, 20) 
        ;InputBox("標題","提示","默認內容","密碼字符","寬","高","左窗口距離","上窗口距離","密碼輸入延遲時間") 
        ;*就是讓輸入的密碼字符以星號顯示 
        ;@DesktopWidth-600,@DesktopHeight-450,就是讓密碼輸入框居中顯示 
        If @error = 0 Then ;@error=0表示返回的字符串有效 
                If $InputPassWords <> $MyPassWords Then 
                        MsgBox(262144 + 32, "真遺憾!!!", "密碼錯了,想不起來了?", 9) 
                        _Exit() 
                Else ;密碼檢查經過 
                        $InputPassWords = "" ;進入工具操做界面並清空輸入的密碼 
                EndIf 
        ElseIf @error = 1 Then ;@error=1表示用戶按了Cancel按鈕 
                MsgBox(262144 + 32, "", "用戶按了取消按鈕") 
                _Exit() 
        ElseIf @error = 2 Then ;@error=2表示輸入超時 
                MsgBox(262144 + 32, "真遺憾!!!", "輸入口令時間超時", 9) 
                _Exit() 
        ElseIf @error = 3 Then ;輸入框顯示失敗,這一般是由參數失效引發 
                MsgBox(262144 + 16, "意外錯誤!!!", "口令輸入框顯示失敗!請重試!", 9) 
                _Exit() 
        Else 
                _Exit() 
        EndIf 
EndFunc   ;==>_CheckPassWords 
;###########嚴整密碼函數結束############## 
Func _Exit() 
        Exit 
EndFunc   ;==>_Exit
數組

newuser 發表於 2010-8-18 10:55瀏覽器

[b]回覆 [url=http://www.autoitx.com/redirect.php?goto=findpost&pid=196309&ptid=17702]5#[/url] [i]newuser[/i] [/b] 
AutoIt3學習所遇問題集 
1.打開指定網頁? 
錯誤:run(「iexplore.exe [url]http://sohu.com[/url]」) 
緣由:iexplore.exe路徑有問題,run沒法找到它,Run("C:\Program Files\Internet Explorer\iexplore.exe [url]http://10.64.240.131[/url]")解決 
補充:Run("Notepad.exe", "", @SW_MAXIMIZE),最大化的運行記事本 
Run("C:\Program Files\Internet Explorer\iexplore.exe [url]http://10.64.240.131[/url]","",@SW_HIDE),打開指定網站並隱藏 
Run(「control  sysdm.cpl」),打開「控制面板」下的「系統屬性」 
ShellExecute("rundll32.exe","shell32.dll,#61"),打開「開始」「運行」 
ShellExecute("rundll32.exe","shell32.dll,#60"),打開「關閉Windows」窗口 

遺留問題(2010.3.11): 
如何將C:\Program Files換成%ProgramFiles%而變的通用? 
解決(2010.3.11): 
run(@ProgramFilesDir  & 「\Internet  Explorer\iexplore.exe [url]http://10.64[/url]」,」」,@SW_Maximize) 
@ProgramFilesDir  AutoIt3系統變量,指定C:\Program Files具體位置 
&  字符串鏈接符號 
如何打開指定的文件夾? 
解  決 (2010.3.11): 
Run(「explorer c:\program files」) 
Run(「explorer /e,c:\program files」) ,以「資源管理器」的方式打開指定的文件夾 
2.如何用ControlCommand去掉軟件安裝中的某插件或快捷方式? 
語法:ControlCommand ( "窗口標題", "窗口文本", 控件ID, "命令", "選項") 
3.打開記事本自動輸入定製內容後在自動關閉記事本程序? 
原碼: 
Run('notepad.exe') 
WinWait("無標題 - 記事本","") 
WinWaitActive("無標題 - 記事本","") 
Send("自動向記事本輸入指定內容後並自動關閉它") 
WinClose("無標題 - 記事本","") 
WinWait("記事本","") 
WinWaitActive("記事本","") 
Send('&n') ;send('notepad.exe&n')也能夠 
錯誤:將winclose放到最後一行,那確定不對,先要關閉記事本後纔出現「是否存儲內容」的窗口。 
補充(感謝SXD):能夠利用ControlSend()在後臺往控件內輸入字符串,前提是利用「高級模式」,準確度和穩定度都不錯,可經過將Window Info工具中的「查詢工具-準星」拖到指定目標,如桌面的某個圖標來得到一些座標和控件的信息。例:ControlSend("新建 文本文檔 (2).txt - 記事本","","[CLASS:Edit;INSTANCE:1]","Today's time/date is {F5}") ,注意{F5}表示輸入「時間和日期」。 
4.winzip自動化安裝遇到的問題? 

錯誤:捕捉到的「標題」是WinZip&reg; 14.0 Setup,可是複製到編輯器@變成了? ,這樣在winwaitactive中沒有成功捕捉到該窗口,controlclick  Setup固然錯誤。 
5.建立GUI截面遇到的關於」 「和「」的錯誤? 
原碼: 
#include <GUIConstants.au3> 

GUICreate("GUI圖形窗口",200,100) 
GUICtrlCreateLabel("鄒國奎建立",20,20,70) 
$okButton=GUICtrlCreateButton("還OK吧",40,40,60) 
GUISetState(@SW_SHOW) 

While 1 
        $msg=GUIGetMsg() 
         
        Select 
      Case $msg=$GUI_EVENT_CLOSE 
            MsgBox(0,"GUIs事件","你選擇了關閉!正在退出") 
      Case $msg=$okButton 
            MsgBox(0, "GUI 事件", "您按下了「還OK吧」按鈕!") 
        ExitLoop 
    EndSelect 
Wend 
注意:紅色的「還OK吧」,不該該是在英文狀態輸入的」 「。 
5.學習GUI的onEvent模式遇到的問題? 
代碼以下: 
#include <GUIConstants.au3> 
Opt("GUIonEventMode",1) 
$mainwindow=GUICreate("主窗口-鄒國奎",200,100,200,100) 
GUISetOnEvent($gui_event_close,"CLOSEClick") 
GUICtrlCreateLabel("最近過的如何!",10,20) 
$Button=GUICtrlCreateButton("還OK!",20,40,60) 
GUICtrlSetOnEvent($Button,"BUTTON") 

$secondwindow=GUICreate("這是一個測試的非主窗口,不會顯示",200,100) 
GUISetOnEvent($gui_event_close,"CLOSEClick") 

GUISwitch($mainwindow) 
GUISetState(@SW_SHOW) 
;GUISetState(@SW_SHOW,$mainwindow)也能夠 
While 1 
        Sleep(1000) 
WEnd 

Func BUTTON() 
        MsgBox(0,"GUI事件","你按下了「還OK!」按鈕") 
EndFunc 

Func CLOSEClick() 
        If @GUI_WinHandle=$mainwindow Then 
                MsgBox(0,"GUI事件","你選擇了關閉主窗口,正在關閉中...") 
                Exit 
                 
        EndIf 
EndFunc 
注意紅色部分,我點擊按鈕事件沒反應啊?原來我是用了GUISetonEvent,而按鈕是控件應該是GUICtrlSetonEvent()啊!機械學習不靈活呀! 
6.使用#include屢次包含同一個自定義的AU3文件錯誤? 
代碼以下: 
;;; 下面是腳本 TIME.AU3 的代碼 ;;; 
MsgBox(0,"", "如今時間是: " & @HOUR & ":" & @MIN & ":" & @SEC) 

;;; 下面是腳本 SCRIPT.AU3 的代碼 ;;; 
#include "TIME.AU3" 
MsgBox(0,"", "示例") 
#include "TIME.AU3" 
Exit 

; 運行 script.au3 將會輸出如下三個消息框: 
; 第一個報時,第二個是「示例」,第三個也是報時。 
注意:在SCRIPT.AU3中使用#include屢次包含TIME.AU3時,要在被包含的TIME.AU3文件頭部添加#inclued-once,即 
;;; 下面是腳本 TIME.AU3 的代碼 ;;; 
#inclued-once 
MsgBox(0,"", "如今時間是: " & @HOUR & ":" & @MIN & ":" & @SEC) 
;若是不加#include-once,會發生TIME.AU3已經包含錯誤提示,但「繼續執行」一樣會輸出3個消息框 
代碼補充: 
;;; 下面是腳本 LIBRARY.AU3 的代碼 ;;; 
#include-once 

Func myFunc() 
    MsgBox(0,"", "此對話框由 library.au3 內的函數調出") 
EndFunc 

;;; 下面是腳本 SCRIPT.AU3 的代碼 ;;; 
#include "Library.au3" 
#include "Library.au3"  ;若LIBRARY.AU3爲使用 #include-once指令則會拋出一個錯誤 

MsgBox(0, "示例", "此對話框從 script.au3 中調出") 
myFunc() 
Exit 
; 運行 script.au3 將會輸出如下兩個消息框: 
; 第一個是「此對話框從 script.au3 中調出」 
; 第二個是「此對話框由 library.au3 內的函數調出」 
注意:雖然在script.au3中2次使用#include "Library.au3",但在執行script.au3時,只彈出2個信息框,說明「自定義函數-myFunc()」只用在被調用時才執行其特定的功能。 
遺留問題:在scirpt.au3中的多個#include "Library.au3"是否是每個都執行了呢?若是將以上代碼改爲 
;;; 下面是腳本 LIBRARY.AU3 的代碼 ;;; 
#include-once 
MsgBox(0,"", "此對話框由 library.au3 內的函數調出") 
Func myFunc() 
    MsgBox(0,"", "此對話框由 library.au3 內的函數調出") 
EndFunc 

;;; 下面是腳本 SCRIPT.AU3 的代碼 ;;; 
#include "Library.au3" 
MsgBox(0, "示例", "此對話框從 script.au3 中調出") 
#include "Library.au3"  ;若LIBRARY.AU3爲使用 #include-once指令則會拋出一個錯誤 
myFunc() 
Exit 
那麼仍是顯示2個消息框分別是: 
"此對話框由 library.au3 內的函數調出"和"此對話框從 script.au3 中調出",感受script.au3中第1個#include "Library.au3"執行了,可後一個#include "Library.au3" 和myFunc()沒起做用啊??? 
7.交換數據錯誤? 
代碼以下: 
dim $first=1,$second=2 
swap($first,$second) 
msgbox(0,"$first和$second交換後: ","$first= " &  $first) 
func swap( $x, $y) 
local $t 
$t=$x 
$x=$y 
$y=$t 
endfunc 
注意:沒法完成交換,改爲func swap(ByRef $x,ByRef $y)則能夠完成交換,ByRef指定函數swap()所接受的參數必須是變量且能夠被函數swap()修改。 
8.for…next問題? 
代碼以下: 
For 1 To $y Step 1 
MsgBox(0,"顯示尋麻疹文檔內容:",$x) 
Next 
注意:For <控制變量> = <初始值> To <終值> [Step <步長>],基礎不牢啊! 
9.soundplay(「music」,0)任務欄的AU3圖標一閃而過,將0改1就OK!0是不等歌曲播完直接執行下一語句,可下面什麼都沒有因此就退出了,1則是等歌曲播放完再退出。不細心看幫助啊!!! 
10.關於@error的困惑? 
代碼以下: 
$var = IniReadSection("C:\Temp\myfile.ini", "section2") 
If @error Then  
    MsgBox(4096, "", "發生錯誤,可能目標文件並不是標準的INI文件.") 
Else 
    For $i = 1 To $var[0][0] 
        MsgBox(4096, "", "關鍵字:" & $var[$i][0] & @CRLF & "數值:" & $var[$i][1]) 
    Next 
EndIf 
注意:總把 if @error 當成 if @error=0,0固然是沒錯誤,實際它是「若是有錯怎麼怎麼樣」,IniReadSection()讀取的返回的數組元素的數量默認都存儲到$var[0][0]是規定! 
11.GUICtrlCreateAVI()的問題? 
注意:不支持有聲AVI文件。 
外置的同樣能夠。可是網上的視頻AVI又不行。鬱悶。AU3安裝目錄自帶的卻行。 
緣由還在研究中。可是能夠不用GUICtrlCreateAvi 
直接用GUICtrlCreateObj。只是這個加載對象的,運行程序的時候感受有點慢。 
找到緣由了。。。幫助沒說明GUICtrlCreateAvi ()  

上MSDN才查到緣由。而幫助裏邊_GUICtrlAVI_Open才說有。FUCK 

GUICtrlCreateAvi () 與_GUICtrlAVI_Open是同樣不支持有聲AVI的。 

MSND說明: 
Open does not support sound in an AVI clip; you can open only silent AVI clips. 

兩個都是隻支持無聲AVI,有聲的用ObjCreate("WMPlayer.OCX")吧。 
12.for…next從1加到100的問題? 
代碼以下: 
Dim $Sum,$i 
$Sum=0 
$i=1 
For $i=1 To 100  [Step 1] 
        $Sum=$Sum+$i 
Next 
MsgBox(0,"從1一直加到100","總和:"&$Sum) 
個人錯誤:在for循環內又加了 個$i=$i+1,真是多餘+錯誤,for自己已經加了嗎 ! 
13.ToolLip居中顯示:ToolTip("測試ToolLip居中顯示文字", @DesktopWidth/2 -100, @DesktopHeight/2 -100,"正在執行安裝...") 

•        AU3中GUI設計的技巧? 
1.窗口居中 
GUICreate("個人圖片窗", 350, 300, -1, -1, $WS_SIZEBOX + $WS_SYSMENU)  ; 建立居中窗口 
GUISetBkColor(0xE0FFFF) 
$n = GUICtrlCreatePic("F:\兒子背景照片\080402069.jpg", 50, 50, 200, 50) 
1、後面的, -1, -1表示窗口自動居中 
$Form1 = GUICreate("程序標題", 360, 182, -1, -1) 
2、窗口只顯示系統關閉按鈕 
$Form1 = GUICreate("程序標題", 360, 182, -1, -1, BitOR($WS_SYSMENU, $WS_CAPTION, $WS_POPUP), 0) 
3、窗口無邊框 
$Form1 = GUICreate("程序標題", 360, 182, -1, -1, BitOR($WS_POPUP, $WS_BORDER)) 
4、窗口無系統按鈕 
$Form1 = GUICreate("程序標題", 360, 182, -1, -1, BitOR($WS_CAPTION,$WS_POPUP), 0) 
爲了使AU3程序可以「乾淨」的退出,咱們有必要在程序退出前刪除一些運行痕跡或叫臨時文件,比較特殊的有下面幾種狀況: 

一、刪除程序自己:(刪除程序退出前正在使用的文件,道理是同樣的) 
Run('cmd.exe /c ping -n 3 127.1 & del /q "' & @ScriptFullPath & '"', @ScriptDir, @SW_HIDE) 
注:若是運行中的AU3程序爲soft.exe,將以上代碼加到退出代碼Exit的前面,那麼程序將在退出後3秒刪除自身 

二、刪除程序所在目錄: 
Run('cmd.exe /c ping -n 4 127.1>nul & rd /s /q "' & @ScriptDir & '"' , @ScriptDir, @SW_HIDE) 
注:若是將以上代碼加到退出代碼Exit的前面,那麼程序將在退出後4秒刪除程序所在目錄 
陸續貼出一些網友提問及我來解決的笨方案,但願有更好的貼上來: 

問:有沒有辦法 把桌面的圖標名稱 修改一下 
個人方法:FileMove(@DesktopDir & "\九品網絡電視 (9PTV).lnk", @DesktopDir & "\九品電視.lnk") 

問:刪除WINDOWS下面的以$開頭的文件夾,應該怎麼寫啊 
個人方法: 
RunWait(@ComSpec & " /c dir " & @WindowsDir & "\$* /a:d /b >" & @WindowsDir & "\temp\temp.log", @ScriptDir, @SW_HIDE) 
RunWait(@ComSpec & " /c echo for /f %%i in (%windir%\temp\temp.log) do rd %windir%\%%i /s /q >" & @WindowsDir & "\temp\1.bat", @ScriptDir, @SW_HIDE) 
RunWait(@ComSpec & " /c call " & @WindowsDir & "\temp\1.bat", @ScriptDir, @SW_HIDE) 
FileDelete(@WindowsDir & "\temp\temp.log") 
FileDelete(@WindowsDir & "\temp\1.bat") 

問:如何用默認瀏覽器打開網頁 
個人方法:不少,最簡單的以下 
Run('cmd /c start "" "http://www.crwmart.com"', "", @SW_HIDE) 

問:運行程序後,等待屏幕點300,200 顏色爲白色,若是等待10秒不出現進行下一步程序 
頑固不化回答: 
Dim $IsColor = False 
$time = TimerInit() 
While 1 
$timeall = TimerDiff($time) 
If $timeall > 10000 Then ExitLoop 
$coord = PixelSearch(330, 520, 350, 540, 0xFEC152) 
If @error <> 1 And @error <> 0 Then 
  $IsColor = True 
  ExitLoop 
EndIf 
WEnd 
If $IsColor Then 
MsgBox(0, 0, "找到顏色啦") 
Else 
MsgBox(0, 0, "10秒內沒有此顏色出現") 
EndIf 

問:發送模擬CTRL+ENTER鍵,Send 命令是什麼? 
頑固不化回答:send("^{enter}") 

問:有沒有鎖定托盤圖標或隱藏的方法 
個人回答:TraySetState(2) 

問:怎麼讀取文本的第n行內容 
神龍翔答:filereadline(文件名,n) 

問:怎樣使得本地計算機與服務器的時間日期同步? 
神龍翔答:run("net time \\服務器IP /set /y","",@sw_hide) 
•         
TrayTip("偶然發現", "後面用圖標4即顯示程序自己圖標", "", 4) 
Sleep(5000) 

可用於 FileOpenDialog, FileSaveDialog 或 FileSelectFolder 等函數  

列表來自 Registry Guide for Windows at WinGuides Network 

注意:這些值並不是都能適用於上面提到的 AutoIt 函數. 

例子:  FileSelectFolder ("選擇文件夾.", "::{00000000-1080-F9E5-6311-4162E05A6BEE}", 1)  
文件夾        File___ 函數的目錄參數值 
管理工具        "::{D20EA4E1-3957-11d2-A40B-0C5020524153}" 
公文包        "::{85BBD920-42A0-1069-A2E4-08002B30309D}" 
控制面板        "::{21EC2020-3AEA-1069-A2DD-08002b30309d}" 
字體        "::{D20EA4E1-3957-11d2-A40B-0C5020524152}" 
歷史        "::{FF393560-C2A7-11CF-BFF4-444553540000}" 
收件箱        "::{00020D75-0000-0000-C000-000000000046}" 
Microsoft Network        "::{00028B00-0000-0000-C000-000000000046}" 
個人電腦        "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}" 
個人文檔        "::{450D8FBA-AD25-11D0-98A8-0800361B1103}" 
網上鄰居        "::{208D2C60-3AEA-1069-A2D7-08002B30309D}" 
網絡(搜索)計算機        "::{1f4de370-d627-11d1-ba4f-00a0c91eedba}" 
網絡鏈接        "::{7007ACC7-3202-11D1-AAD2-00805FC1270E}" 
打印機與傳真        "::{2227A280-3AEA-1069-A2DE-08002B30309D}" 
程序文件夾        "::{7be9d83c-a729-4d97-b5a7-1b7313c39e0a}" 
回收站        "::{645FF040-5081-101B-9F08-00AA002F954E}" 
掃描儀或照相機        "::{E211B736-43FD-11D1-9EFB-0000F8757FCD}" 
計劃任務        "::{D6277990-4C6A-11CF-8D87-00AA0060F5BF}" 
開始菜單文件夾        "::{48e7caab-b918-4e58-a94d-505519c795dc}" 
Internet 臨時文件夾        "::{7BD29E00-76C1-11CF-9DD0-00A0C9034933}" 
Web 文件夾        "::{BDEADF00-C265-11d0-BCED-00A0C90AB50F}" 
Local $MemInfo=MemGetStats() 
MsgBox(64,"顯示內存相關信息","物理內存總數(M); " & $MemInfo[1]/1024 & @CRLF _ 
                             & "可用物理內存(M): " & $MemInfo[2]/1024 & @CRLF _ 
                                                         & "內存使用率(百分比):" & $MemInfo[0] & @CRLF _ 
                                                         & "虛擬內存大小(M):" & $MemInfo[5]/1024 & @CRLF _ 
                                                         & "可用虛擬內存大小(M):" & $MemInfo[6]/1024) 

DirCopy(@MyDocumentsDir,"d:\MyDocuments",1)  
;將@MyDocumentsDir目錄拷貝到目標目錄,若是目標目錄不存在將新創建,1表示覆蓋已存在的文件 
Local $CreateTempDirectory=DirGetSize("f:\temp",1) ;1表示啓用@extend模式,返回一個一維數組 
MsgBox(0,"顯示擴展模式返回的一維數組相關信息","文件夾的大小是(MB):" & $CreateTempDirectory[0]/1024/1024 & @CRLF _ 
                                                 & "文件夾內的子文件夾個數是:" & $CreateTempDirectory[2] & @CRLF _ 
                                                                                                 & "文件夾內的文件個數是:" & $CreateTempDirectory[1]) 
                                                                                                  
;;;;################################################# 

;如下是遍歷某目錄下的全部文件 
;顯示當前目錄中全部文件的文件名 
$search = FileFindFirstFile("*.*")   

; 檢查搜索是否成功 
If $search = -1 Then 
    MsgBox(0, "錯誤", "沒有文件/目錄 匹配搜索") 
    Exit 
EndIf 

While 1 
    $file = FileFindNextFile($search)  
    If @error Then ExitLoop 
     
    MsgBox(4096, "文件:", $file) 
WEnd 

; 關閉搜索句柄 
FileClose($search) 

;;;;################################################# 
;;;;################################################# 

;讀取整個文本內容或指定行或逐個字母 
$file = FileOpen("test.txt", 0) 

; 檢查打開的文件是否可爲讀 
If $file = -1 Then 
    MsgBox(0, "錯誤", "不能打開文件.") 
    Exit 
EndIf 

; 每次讀取一個字符,直到文件結束(譯註:讀中文必須設置爲遠大於1的值!)(譯註的譯註(thesnow):ANSI編碼中,一箇中文爲兩個字符/字節) 
While 1 
    $chars = FileReadLine($file,2)  
        ;讀取第2行文本內容 
        ;更改成$chars=fileread($file,1)就是逐個字母讀取,沒有1就是整個文本內容 
    If @error = -1 Then ExitLoop 
    MsgBox(0, "讀取的字符:", $chars) 
Wend 

FileClose($file) 
;;;;################################################# 
AdlibRegister("KillWindow", 500)  ;註冊一個函數-KillWindow,500表示多長時間調用一次函數,這裏是5秒調用一次 

AdlibRegister("MyAdlib") ;基本架構 
;... 
Exit 

Func MyAdlib() 
    ;... 運行中儘可能避免使用等待效果的函數, 例如 Wait(), MsgBox(), InputBox()等... 
    If WinActive("Error") Then 
        ;... 
    EndIf 
EndFunc 
;;;;################################################# 
;;用於學習捕捉屏幕指定區域圖象並在GUI窗口顯示,可移動 
截取指定屏幕某範圍內的圖片:_ScreenCapture_Capture ,_GDIPlus_ImageSaveToFile  
圖片以一個窗口的形式展示:GUICtrlCreatePic,_GDIPlus_ImageGetWidth ,_GDIPlus_ImageGetHeight  
自由拉動圖片窗口的大小:$WS_SIZEBOX(GUI控件樣式) 
圖片自適應窗口的大小:WinGetPos,GUICtrlSetResizing  
;;;;################################################# 
GUICtrlCreateAvi() ;建立AVI控件,怎麼沒法建立數碼相機錄製的AVI,老說是無效映像? 
語法:GUICtrlCreateAvi ( 文件名, 子文件ID, 左側, 頂部 [, 寬度 [, 高度 [, 樣式 [, 擴展樣式]]]] ) 
子文件ID表示若是文件裏有多個視頻片斷,那麼要播放的是哪一個ID 
例:$ani1 = GUICtrlCreateAvi(@SystemDir & "\shell32.dll", 165, 50, 10) 
其中165就是文件shell32.dll中的第165,改爲其餘的能夠看到系統更多的視頻,若是文件裏只有1個視頻,設置爲-1。 
GUICtrlSetState($ani1,1) 其中1表示播放指定視頻,0表示中止播放。 
;;;;################################################# 
Opt("GUICoordMode", 2) ;設置GUICtrlGetPos()函數的座標參照,2是對於當前位置的座標參照 
;;;;################################################# 
要讓 按鈕或複選框等 顯示圖標或圖象, 就必須使用樣式: $BS_ICON 或 $BS_BITMAP  
例:GUICtrlCreateButton("圖象按鈕", 10, 20, 40, 40, $BS_ICON) 
    GUICtrlSetImage(-1, "shell32.dll", 22) 
        GUICtrlCreateCheckbox("複選框",10,80,400,100,$BS_BITMAP) 
        ;GUICtrlSetImage(-1, "shell32.dll", 23) 
        GUICtrlSetImage(-1,"D:\zgk_2010\autoit\AutoIt_zgk_works\播放器\bfq\01.jpg") ;沒顯示出來圖象,應該仍是 JPG格式的問題 
        GUICtrlSetImage(-1,"D:\Mydocuments\My Pictures\untitled.bmp") ;.bmp能夠,.jpg不行 
;;;;#################################################         
建立1個組合框 
GUICtrlCreateCombo("", 10, 10) 
GUICtrlSetData(-1, "item1|item2|item3", "item3") 最後一個item3表示組合框內默認顯示item3,若是不想顯示設置爲空 
;;;;#################################################         
建立右鍵菜單相關 
#include <GUIConstantsEx.au3> 
#include <ButtonConstants.au3> 

Opt('MustDeclareVars', 1) 

Example1() 


; **************** 
; * 第一個樣本,右鍵菜單示例 * 
; **************** 
Func Example1() 
    Local $contextmenu, $button, $buttoncontext, $buttonitem, $msg 
    Local $newsubmenu, $textitem, $fileitem, $saveitem, $infoitem 

    ;右擊點擊窗口帶出右鍵菜單. 
    ;右鍵點擊「肯定」按鈕,會彈出一個控件特定右鍵菜單. 

    GUICreate("個人上下文菜單窗口", 300, 200) 

    $contextmenu = GUICtrlCreateContextMenu()  ;爲窗口建立右鍵菜單 

    $button = GUICtrlCreateButton("肯定", 100, 100, 70, 20) 
    $buttoncontext = GUICtrlCreateContextMenu($button) ;爲按鈕建立右鍵菜單 
    $buttonitem = GUICtrlCreateMenuItem("關於按鈕...", $buttoncontext) ;爲按鈕右鍵菜單建立菜單項 
    ; 如下建立窗口標題欄的右鍵菜單 
    $newsubmenu = GUICtrlCreateMenu("新建", $contextmenu)  ;爲窗口右鍵菜單新建菜蛋 
    $textitem = GUICtrlCreateMenuItem("文本", $newsubmenu)  ;爲窗口右鍵菜單下的菜蛋建菜單項 

    $fileitem = GUICtrlCreateMenuItem("打開", $contextmenu) ;爲窗口右鍵菜單新建菜單項 
    $saveitem = GUICtrlCreateMenuItem("保存", $contextmenu) ;爲窗口右鍵菜單新建菜單項 
    GUICtrlCreateMenuItem("", $contextmenu)     ; 分隔符  

    $infoitem = GUICtrlCreateMenuItem("信息", $contextmenu)  ;爲窗口右鍵菜單新建菜單項 

    GUISetState() 

    ; 運行窗口直到用戶關閉 
    While 1 
        $msg = GUIGetMsg() 
         
        If $msg = $GUI_EVENT_CLOSE Then ExitLoop 
    WEnd 
    GUIDelete() 
EndFunc   ;==>Example1 
;;;;#################################################         
建立日期控件 
例:$date = GUICtrlCreateDate("2010/03/07", 10, 10, 185, 20) 2010/03/07是默認日期 
最近發現程序退出是應該有個:GUIDelete() ,退出程序時將GUI及其內的控件刪除是個好的編程習慣! 
;;;;#################################################         
關於虛擬控件Dummy,不瞭解它的實際用途? 
#include <GUIConstantsEx.au3> 

Opt('MustDeclareVars', 1) 

Example() 

Func Example() 
    Local $user, $button, $cancel, $msg 

    GUICreate("Dummy虛擬控件", 250, 200, 100, 200) ;真實的主窗口 
    GUISetBkColor(0x00E0FFFF)  ; 設置背景色  

    $user = GUICtrlCreateDummy() ;建立虛擬控件 
    $button = GUICtrlCreateButton("事件", 75, 170, 70, 20) ;虛擬控件上的按鈕 
    $cancel = GUICtrlCreateButton("取消", 150, 170, 70, 20) ;虛擬控件上的按鈕 
    GUISetState() 

    Do 
        $msg = GUIGetMsg() 
         
        Select 
            Case $msg = $button 
                GUICtrlSendToDummy($user) ;點擊$button時,虛擬控件接收GUICtrlSendToDummy($user)發來的信息 就是虛擬控件自己,消失了或退出了 
            Case $msg = $cancel 
                GUICtrlSendToDummy($user) 
            Case $msg = $user 
                ; 關閉前的特定動做語句 
                ; ... 
                Exit 
        EndSelect 
    Until $msg = $GUI_EVENT_CLOSE 
EndFunc   ;==>Example 
;;;;#################################################         
;刪除文本中 全部換行符號或回車 
$file=FileRead("1.txt") 
$str=StringRegExpReplace($file,'(?m)[\n|\r]','') 
ConsoleWrite($str)

相關文章
相關標籤/搜索