AutoIt Jellydn – Lớp 06T1 – Khoa CNTT Đai học Bách Khoa ĐàNẵng
AutoIt
Jellydn – Lớp 06T1 – Khoa CNTTĐai học Bách Khoa Đà Nẵng
Nội dung
n Giới thiệu về AutoItn Các ví dụ mở đầun Cú phápn Một số thủ thuậtn GUI và xử lý sự kiệnn Lời kết
Giới thiệu về AutoItn AutoIt
n Là một ngôn ngữ scriptn Giúp NSD giả lập tự động:
n Phím n Kích chuộtn Tương tác với chương trình,file khác của máy tính.
n Có cấu trúc tựa BASICn Đơn giản , dễ họcn Nhỏ gọnn Miễn phí
n Tips: nên gõ và thực thi lại các ví dụ khi học !!!n Tải tại và cài đặt AutoIt tại địa chỉ
http://www.autoitscript.com/autoit3/
Các ví dụ mở đầu
n HelloWorldn Chuột phải ngoài desktop -> new ->
AutoIt v3 Script
Các ví dụ mở đầu
n HelloWorldn Đặt tên là helloworld.au3
Các ví dụ mở đầu
n HelloWorldn Chuột phải lên file vừa tạo -> Edit Script
Các ví dụ mở đầu
n HelloWorldn SciTE sẽ được mở
Các ví dụ mở đầu
n HelloWorldn Bạn thêm vào cuối file helloworld.au3
n MsgBox(0, "Tutorial", "Hello World!")
n Saven Kiểm tra cú pháp :Tool->SyntaxCheck Prodn Nhấn F5 (Tool -> Go)n Kết quả
Các ví dụ mở đầu
n Tương tác với notepadn Tạo file note.au3 như ví dụ trênn Vào Start -> Run : gõ notepadn Mở công cụ : AutoIt Window Info
n Vào Start->Programs->AutoIt v3->AutoIt Window Info
n Dùng để lấy thông tin của một cửa sổ ứng dụng
Các ví dụ mở đầu
n Tương tác với notepadn Kích chuột vào của sổ notepad sẽ được
thông tin về title
Các ví dụ mở đầu
n Tương tác với notepadn Thêm vào cuối file note.au3
n Run("notepad.exe") n ; lệnh run sẽ gọi file notepad.exe
n WinWaitActive("Untitled - Notepad") n ; đợi tới khi của sổ notepad kích hoạt(active)n ; title : Untitled - Notepad
n Send("This is some text.") n ; gởi dòng text tới notepad
Các ví dụ mở đầu
n Tương tác với notepadn Chạy thử file ( Tool->Go hoặc F5)
n Kết quả
Các ví dụ mở đầu
n Tương tác với notepadn Tiếp tục thêm vào cuối file note.au3
n WinClose("Untitled - Notepad") n ;tắt notepad với title:Untitled – Notepad
Các ví dụ mở đầu
n Tương tác với notepadn Khi tắt sẽ gặp thông báo -> lấy title
Các ví dụ mở đầu
n Tương tác với notepadn Tiếp tục thêm vào cuối file note.au3
n WinWaitActive("Notepad", "Do you want to save") n ;đợi thông báo tắt xuất hiện
n Send("!n") n ; !n=Alt+N -> phím tắt của No trong lựa chọn thoát
n Save và thực thi (F5)
Cú pháp
n Kiểu dữ liệun AutoIt chỉ 1 kiểu dữ liệu gọi là Variant
n Nó có thể chứa số hay chuỗi kí tựn Tùy thuộc vào lúc xử lýn Gồm những loại dữ liệu sau:
n Int32 n Int64n Doublen Stringn Binaryn Pointer
Cú phápn Biến
n Định danh:n Bắt đầu với $n Gồm chữ , số và _n Ví dụ : $myvar , $my_var
n Khai báo: n Dim
n Ví dụ : Dim $var1 n Localn Global
n Có thể không khai báo mà sử dụng trực tiếpn Ví dụ: $var1 = "create and assign"
Cú phápn Biến
n Hằngn Dùng từ khóa const
n Const $const1 = 1, $const2=12
n Phạm vi hoạt độngn Global
n Sử dụng toàn chương trìnhn Từ lúc khai báo
n Localn Chỉ trong hàmn Hủy khi hàm kết thúc
Cú pháp
n Biếnn Mảng
n Truy cập phần tử qua chỉ sốn $Array[0]="A”
n Trong 1 mảng có thể chứa nhiều loại dữ liệun $Array[0]=1
$Array[1]=true$Array[2]="Text"$Array[3]=$AnotherArray
n Điều này không bị cấm nhưng không nên dùng
Cú pháp
n Macrosn Là những biến chỉ đọcn Đặt bởi AutoItn Tên của macro bắt đầu với @n Không thể gán giá trị cho macro
Cú phápn Toán tử
n Số họcn =,+=,-=,*=,/=,&=,+,-,*,/,&,^
n & : nối 2 chuỗin ^ : mũ
n Logicn AND , OR , NOT
n So sánhn =,==,<,<=,>,>=,<>
n = : so sánh 2 sốn == : so sánh 2 chuỗin <> : khác
Cú pháp
n Câu điều kiệnn If...Then...Else
n $var = 20
If $var > 10 ThenMsgBox(0, "Example", "$var was greater
than 10!")Else
MsgBox(0, "Example", "$var was less than 10")EndIf
Cú phápn Câu điều kiện
ï Select...Case
n $var = 30
SelectCase $var > 1 AND $var <= 10
MsgBox(0, "Example", "$var was greater than 1")
Case $var > 10 AND $var <= 20MsgBox(0, "Example", "$var was greater than 10")
Case $var > 20 AND $var <= 30MsgBox(0, "Example", "$var was greater than 20")
Case $var > 30 AND $var <= 40MsgBox(0, "Example", "$var was greater than 30")
Case $var > 40MsgBox(0, "Example", "$var was greater than 40")
EndSelect
Cú phápn Câu điều kiện
ï Switch...Case
n $var = 30
Switch Int($var)Case 1 To 10
MsgBox(0, "Example", "$var was greater than 1")
Case 11 To 20MsgBox(0, "Example", "$var was greater than 10")
Case 21 To 30MsgBox(0, "Example", "$var was greater than 20")
Case 31 To 40MsgBox(0, "Example", "$var was greater than 30")
Case ElseMsgBox(0, "Example", "$var was greater than 40 or less or equal to 0")
EndSwitch
Cú pháp
n Vòng lặpn For...To...Step...Next
n For <variable> = <start> To <stop> [Step <stepval>]statements...
Next
n Ví dụ:n For $i = 5 to 1 Step -1
MsgBox(0, "Count down!", $i)NextMsgBox(0,"", "Blast Off!")
Vòng lặp cho phép chạy trong nó
vòng lặp for khác
Cú pháp
n Vòng lặpn While...WEnd
n While <expression>statements...
WEnd
n Ví dụ:n $i = 0
While $i <= 10MsgBox(0, "Value of $i is:", $i)$i = $i + 1
WEnd !")
Vòng lặp cho phép chạy trong nóvòng lặp While
khác
Cú pháp
n Vòng lặpn Do...Until
n Dostatements...
Until <expression> n Ví dụ:
n $i = 0Do
MsgBox(0, "Value of $i is:", $i)$i = $i + 1
Until $i = 10
Vòng lặp cho phép chạy trong nó
vòng lặp Do Until khác
Cú phápn Vòng lặp
n With...EndWith n With <expression>
statements...
EndWith
n Ví dụ:n $oExcel = ObjCreate("Excel.Application")
$oExcel.visible =1$oExcel.workbooks.add
With $oExcel.activesheet.cells(2,2).value = 1.range("A1:B2").clear
EndWith
$oExcel.quit
Vòng lặp không cho phép chạy
trong nó vòng lặp With khác
Cú pháp
n Vòng lặpn For...In...Next
n For <$Variable> In <expression>statements...
Next
n Chỉ làm việc với mảng hay tập đối tượng
Vòng lặp cho phép chạy trong nó
vòng lặp For khác
Cú phápn Vòng lặp
n For...In...Nextn ;Using an Array
Dim $aArray[4]
$aArray[0]="a"$aArray[1]=0$aArray[2]=1.3434$aArray[3]="test"
$string = ""FOR $element IN $aArray
$string = $string & $element & @CRLFNEXT
Msgbox(0,"For..IN Arraytest","Result is: " & @CRLF & $string)
;Using an Object Collection
$oShell = ObjCreate("shell.application")$oShellWindows=$oShell.windows
if Isobj($oShellWindows) then$string=""
for $Window in $oShellWindows$String = $String & $Window.LocationName & @CRLF
next
msgbox(0,"","You have the following windows open:" & @CRLF & $String)else
msgbox(0,"","you have no open shell windows.")endif
Cú phápn Hàm
n Định danh : giống như biếnn Func functioname ( [Const] [ByRef] $param1, ..., [Const] [ByRef] $paramN,
$optionalpar1 = value, ...)...[Return [value]]
EndFunc
n Ví dụ:n $val = 10
For $i = 1 To 10$doubled = MyDouble($val)MsgBox(0, "", $val & " doubled is " & $doubled)$val = $doubled
Next
Exit
Func MyDouble($value)$value = $value * 2Return $value
EndFunc
Một số thủ thuật
n Ẩn icon của AutoIt dưới khay hệ thốngn Thêm #NoTrayIcon vào đầu file
n Thực thi AutoIt trên Vistan Vista yêu cầu “quyền” trước khi thực thin Thêm #RequireAdmin vào đầu file
GUI và lập trình sự kiệnn GUI(Graphical User Interfaces)
n AutoIT cho phép bạn dễ dàng tạo các controln Các control thường dùng:
n Label : tên nhãnn Button : nút bấmn Input : hộp text nhập 1 dòngn Edit : hộp text nhiều dòngn Checkbox,Radion Combo,List n Date n Pic , Iconn Progress : thanh loadingn Menu,ContextMenu n Slider
GUI và lập trình sự kiệnn Các hàm GUI
n GUICreate() : tạo cửa sổ làm việcn GUICtrlCreate…() : tạo các control tương ứngn GUISetState() : hiện hay ẩn cửa sổn GUIGetMsg() : lấy thông tin về cửa sổn GUICtrlRead() : đọc dữ liệu từ controln GUICtrlSetData() : ghi dữ liệu vào controln GUICtrlSet…(): ghi dữ liệu vào một số thuộc tính
khác ( màu sắc , font chữ,…)
GUI và lập trình sự kiệnn GUI(Graphical User Interfaces)
n HelloGUI.au3n #include <GUIConstantsEx.au3>
;Tao cua so 200x100 voi ten la Hello Worldn GUICreate("Hello World", 200, 100)
;Tao label va buttonn GUICtrlCreateLabel("Hello world! How are you?", 30, 10)
GUICtrlCreateButton("OK", 70, 50, 60);Hien cua so
n GUISetState(@SW_SHOW);doi 2s
n Sleep(2000)
GUI và lập trình sự kiện
n Lập trình sự kiệnn AutoIt có 2 chế độ
n MessageLoopn Là mặc định của AutoItn Dùng hàm GUIGetMsg() để lấy sự kiện
n OnEventn Dùng hàm Opt("GUIOnEventMode", 1)n Dùng hàm GUICtrlSetOnEvent() để tạo hành động
cho sự kiện
GUI và lập trình sự kiệnn Lập trình sự kiện
n MessageLoopn GUIGetMsg() sẽ trả về 3 kiểu
n Không có sự kiện : trả về 0n Sự kiện của control : trả về controlIDn Sự kiện của hệ thống : được khai báo trong GUIConstantsEx.au3
n $GUI_EVENT_CLOSE$GUI_EVENT_MINIMIZE$GUI_EVENT_RESTORE$GUI_EVENT_MAXIMIZE$GUI_EVENT_PRIMARYDOWN$GUI_EVENT_PRIMARYUP$GUI_EVENT_SECONDARYDOWN$GUI_EVENT_SECONDARYUP$GUI_EVENT_MOUSEMOVE$GUI_EVENT_RESIZED$GUI_EVENT_DROPPED
GUI và lập trình sự kiệnn Lập trình sự kiện
n MessageLoopn Ví dụ đơn giản:
n #include <GUIConstantsEx.au3>GUICreate("Hello World", 200, 100)GUICtrlCreateLabel("Hello world! How are you?", 30, 10)$okbutton = GUICtrlCreateButton("OK", 70, 50, 60)GUISetState(@SW_SHOW)While 1$msg = GUIGetMsg()SelectCase $msg = $okbuttonMsgBox(0, "GUI Event", "You pressed OK!")
Case $msg = $GUI_EVENT_CLOSEMsgBox(0, "GUI Event", "You clicked CLOSE! Exiting...")ExitLoop
EndSelectWEnd
GUI và lập trình sự kiện
n Lập trình sự kiệnn MessageLoop
n GUIGetMsg(1)n Trả về một mảngn $array[0] = 0 hoặc Event ID hoặc Control IDn $array[1] = cửa sổ đang xử lýn $array[2] = control đang thực thin $array[3] = tọa độ X của cửa sổn $array[4] = tọa độ Y của cửa sổ
GUI và lập trình sự kiệnn Lập trình sự kiện
n MessageLoopn #include <GUIConstantsEx.au3>
$mainwindow = GUICreate("Hello World", 200, 100)GUICtrlCreateLabel("Hello world! How are you?", 30, 10)$okbutton = GUICtrlCreateButton("OK", 70, 50, 60)$dummywindow = GUICreate("Dummy window for testing ", 200, 100)GUISwitch($mainwindow)GUISetState(@SW_SHOW)While 1
$msg = GUIGetMsg(1)Select
Case $msg[0] = $okbuttonMsgBox(0, "GUI Event", "You pressed OK!")
Case $msg[0] = $GUI_EVENT_CLOSE And $msg[1] = $mainwindow MsgBox(0, "GUI Event", "You clicked CLOSE on the main window!
Exiting...")ExitLoop
EndSelectWEnd
GUI và lập trình sự kiệnn Lập trình sự kiện
n OnEventn Thao tác với 2 loại sự kiện
n Sự kiện của controln Sự kiện của hệ thống
n Dùng 2 hàm để tạo hành động cho sự kiệnn GUISetOnEvent() n GUICtrlSetOnEvent()
n Không nên dùng cách này vì:n Code dài và rờm ràn Phải bật option (opt)
GUI và lập trình sự kiệnn Lập trình sự kiện
n OnEventn #include <GUIConstantsEx.au3>
Opt("GUIOnEventMode", 1) ; Change to OnEvent mode $mainwindow = GUICreate("Hello World", 200, 100)GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")GUICtrlCreateLabel("Hello world! How are you?", 30, 10)$okbutton = GUICtrlCreateButton("OK", 70, 50, 60)GUICtrlSetOnEvent($okbutton, "OKButton")GUISetState(@SW_SHOW)While 1Sleep(1000) ; Idle around
WEndFunc OKButton()
;Note: at this point @GUI_CTRLID would equal $okbutton,;and @GUI_WINHANDLE would equal $mainwindowMsgBox(0, "GUI Event", "You pressed OK!")
EndFuncFunc CLOSEClicked()
;Note: at this point @GUI_CTRLID would equal $GUI_EVENT_CLOSE, ;and @GUI_WINHANDLE would equal $mainwindow MsgBox(0, "GUI Event", "You clicked CLOSE! Exiting...")Exit
EndFunc
Cùng chức năng nhưng code dài hơn
Lời kết
n Tới đây là bạn đã “vững” kiến thức về AutoItn Nên autoitscript.com để học thêmn Hãy tìm ý tưởng và thử thực hiện nó bằng
AutoITn Tài liệu này được biên soạn từ help của
AutoItn Mọi ý kiến góp ý gởi về địa chỉ