Bài học này sẽ giới thiệu đến các bạn các hàm tương tác với hệ điều hành Windows như tương tác với thư mục, với file, với process, với cửa sổ window,...
I. THƯ MỤC VÀ FILE
AutoIT cho phép các hàm tương tác cơ bản với thư mục và file như tạo, xóa, đổi tên, ghi dữ liệu,... đối với file còn rất nhiều các hàm nâng cao khác, nhưng do tính chất tutorial, mình sẽ chỉ giới thiệu các bạn ở mức cơ bản, khi nào cần đụng tới các hàm nâng cao mình sẽ giới thiệu sau.1) Tương tác với folder
Chức năng | Hàm | Tham biến | Giá trị trả về |
---|---|---|---|
Tạo folder | DirCreate("path") | path: đường dẫn cửa folder muốn tạo | 1 nếu thành công 0 nếu thất bại |
Xóa folder | DirRemove ( "path" [, recurse = 0] ) | path: đường dẫn cửa folder
recurse (tùy chỉnh): 0 - chỉ xóa folder khi folder rỗng 1 - xóa folder kể cả khi folder có tệp bên trong |
1 nếu thành công 0 nếu thất bại |
Copy folder | DirCopy ( "source dir", "dest dir" [, flag = 0] ) | source dir: thư mục sao chép
dest dir: đường đẫn muốn sao chép đến flag (tùy chỉnh): chỉ số ghi đè 0 - không ghi đè nếu có file trùng tên 1 - ghi đè nếu có file trùng tên |
1 nếu thành công 0 nếu thất bại |
Di chuyển folder | DirMove ( "source dir", "dest dir" [, flag = 0] ) | Tương tự hàm DirCopy | 1 nếu thành công 0 nếu thất bại |
DirCreate(@ScriptDir & "\Hoc_AutoIT") ; tạo thư mục Hoc_AutoIT tại thư mục chứa chương trình
DirMove(@ScriptDir & "\Hoc_AutoIT",@TempDir & "\New_Folder") ; dời (move) thư mục vừa tạo vào thư mục temp của hệ thống, đồng thời đổi tên thành New_Folder
DirCopy(@TempDir & "\New_Folder",@ScriptDir & "\Hi_Im_Comeback") ; copy thư mục New_Folder trong thư mục temp hệ thống về thư mục chứa chương trình, đồng thời đổi tên Hi_Im_Comeback
DirRemove(@TempDir & "\New_Folder") ; xóa thư mục
DirRemove(@ScriptDir & "\Hi_Im_Comeback") ; xóa thư mục
DirMove(@ScriptDir & "\Hoc_AutoIT",@TempDir & "\New_Folder") ; dời (move) thư mục vừa tạo vào thư mục temp của hệ thống, đồng thời đổi tên thành New_Folder
DirCopy(@TempDir & "\New_Folder",@ScriptDir & "\Hi_Im_Comeback") ; copy thư mục New_Folder trong thư mục temp hệ thống về thư mục chứa chương trình, đồng thời đổi tên Hi_Im_Comeback
DirRemove(@TempDir & "\New_Folder") ; xóa thư mục
DirRemove(@ScriptDir & "\Hi_Im_Comeback") ; xóa thư mục
@ScriptDir : trả về đường dẫn thư mục chứa script đang chạy, ví dụ tôi chạy chương trình tại D:\Test thì macro này sẽ trả về D:\Test
@TempDir : trả về đường dẫn thư mục temp của Windows
Còn rất niều Macro khác nữa, tôi sẽ giới thiệu đến các bạn ở phần dưới sau.
Các hàm lấy thông tin file
2) Tương tác với file
Các hàm tương tác:Chức năng | Hàm | Tham biến | Giá trị trả về |
---|---|---|---|
Ghi file | FileWrite ( "filehandle/filename", "text/data" ) | filehandle/filename: đường dẫn file text/data: văn bản ghi |
1 nếu thành công 0 nếu thất bại |
Ghi file xuống dòng | FileWriteLine ( "filehandle/filename", "text/data" ) | Tương tự với FileWrite | 1 nếu thành công 0 nếu thất bại |
Copy File | FileCopy ( "source", "dest" [, flag = 0] ) | source: đường dẫn file cần sao chép
dest: đường đẫn muốn sao chép đến flag (tùy chỉnh): chỉ số ghi đè 0 - không ghi đè nếu có file trùng tên 1 - ghi đè nếu có file trùng tên |
1 nếu thành công 0 nếu thất bại |
Di chuyển file | FileMove ( "source", "dest" [, flag = 0] ) | Tương tự hàm FileCopy | 1 nếu thành công 0 nếu thất bại |
Set thuộc tính file | FileSetAttrib ( "file pattern", "+-RASHNOT" [, recurse = 0] ) | file pattern: đường dẫn file +-RASHNOT: + là thêm, - là xóa "R" = READONLY "A" = ARCHIVE "S" = SYSTEM "H" = HIDDEN "N" = NORMAL "O" = OFFLINE "T" = TEMPORARY |
1 nếu thành công 0 nếu thất bại |
Xóa file vào thùng rác | FileRecycle ( "source" ) | source: file cần xóa vào thùng rác | 1 nếu thành công 0 nếu thất bại |
Xóa hẳn file | FileDelete ( "filename" ) | filename: file cần xóa hẳn | 1 nếu thành công 0 nếu thất bại |
Chức năng | Hàm | Tham biến | Giá trị trả về |
---|---|---|---|
Đọc văn bản trong file | FileRead ( "filehandle/filename" [, count] ) | filehandle/filename: đường dẫn file count (tùy chỉnh): số lượng từ cần đọc |
Văn bản đọc được |
Đọc văn bản trong file theo dòng | FileReadLine ( "filehandle/filename" [, line = 1]) | filehandle/filename: đường dẫn file line (tùy chỉnh): dòng cần đọc |
Văn bản của dòng đọc được |
Kiểm tra sự tồn tại của file | FileExists ( "path" ) | path: đường dẫn file | 1 nếu tồn tại, 0 nếu ngược lại |
Một số ví dụ:
$file = @ScriptDir&"\EckOp.txt" ;
FileWrite($file,"Day la mot doan van ban test")
FileWriteLine($file,"Dong 2")
FileWriteLine($file,"Dong 3")
FileSetAttrib($file,"+SH") ; set thuộc tính system và hidden, file sẽ bị ẩn
FileSetAttrib($file,"-SH") ; bỏ set thuộc tính system và hidden
$text = FileRead($file)
MsgBox(64,'Thông báo','Đây là văn bản trong file ' & $text )
$text = FileRead($file,10)
MsgBox(64,'Thông báo','Đây là 10 ký tự đầu trong file ' & $text )
$text = FileReadLine($file,2)
MsgBox(64,'Thông báo','Đây là dòng 2 trong file ' & $text )
FileDelete($file)
FileWrite($file,"Day la mot doan van ban test")
FileWriteLine($file,"Dong 2")
FileWriteLine($file,"Dong 3")
FileSetAttrib($file,"+SH") ; set thuộc tính system và hidden, file sẽ bị ẩn
FileSetAttrib($file,"-SH") ; bỏ set thuộc tính system và hidden
$text = FileRead($file)
MsgBox(64,'Thông báo','Đây là văn bản trong file ' & $text )
$text = FileRead($file,10)
MsgBox(64,'Thông báo','Đây là 10 ký tự đầu trong file ' & $text )
$text = FileReadLine($file,2)
MsgBox(64,'Thông báo','Đây là dòng 2 trong file ' & $text )
FileDelete($file)
Chúng ta để ý code của tôi một chút ở đoạn đầu: đó là thay vì lặp đi lặp lại @ScriptDir&"\EckOp.txt", tôi đã lưu nó trong biến $file để sử dụng. Tương tự tôi sử dụng biến $text để lưu trữ thông tin văn bản trả về, và thông báo nó qua hàm MsgBox.
Tiếp theo khi chạy thử, các bạn sẽ thấy rằng, đoạn thông báo dòng 2 của file lại là văn bản mà tôi ghi là Dong 3. Điều này làm tôi phải giải thích cho các bạn thêm một chút về vấn đề con trỏ.
Con trỏ nói nôm na là vị trí ghi tiếp theo của hàm.
Khi tôi sử dụng hàm FileWrite($file,"Day la mot doan van ban test") thì con trỏ sẽ nằm ở vị trí như trong hình:
Và điều đó khiến cho, hàm tiếp theo của tôi là FileWriteLine($file,"Dong 2") sẽ ghi tiếp tại vị trí con trỏ đó. Bản chất hàm FileWriteLine là ghi tiếp, rồi mới cho con trỏ xuống dòng, sau hàm đó, ta có được văn bản và con trỏ như sau:
Như vậy lúc này con trỏ đã xuống dòng, và hàm FileWriteLine($file,"Dong 3") của tôi sẽ ghi tiếp tại vị trí con trỏ đó, rồi cho con trỏ xuống dòng:
Đó là vấn đề con trỏ trong ghi file, hiểu được điều này sẽ giúp ích không chỉ việc lập trình AutoIT, mà trong rất nhiều các ngôn ngữ khác như pascal, c, c++, java, php,...
3) File dạng INI
INI File là một dạng config file, nó đơn giản chỉ là một file txt với một cấu trúc nhất định.
[section]
key=value
key=value
Các hàm cơ bản về INI
Chức năng | Hàm | Tham biến | Giá trị trả về |
---|---|---|---|
Ghi INI | IniWrite ( "filename", "section", "key", "value" ) | filename: đường dẫn file section: tên section cần ghi key: tên key cần ghi value: tên value cần ghi |
1 nếu thành công 0 nếu thất bại |
Đọc INI | IniRead ( "filename", "section", "key", "default" ) | filename: đường dẫn file section: tên section cần đọc key: tên key cần đọc default: giá trị trả về nếu không đọc được |
Văn bản của key trong section đọc được, nếu không tìm thấy key thì sẽ trả về giá trị default |
Đổi tên section | IniRenameSection ( "filename", "section", "new section" [, flag = 0] ) | filename: đường dẫn file section: tên section cần đổi tên new section: tên section mới cần đổi flag (tùy chọn): tùy chọn ghi đè - 0: nếu như không ghi đè, các tên Key giống nhau khi chuyển qua section mới (nếu có) trong section cũ sẽ bị xóa - 1: sẽ ghi đè toàn bộ giá trị của key có tên giống nhau khi chuyển qua section mới |
1 nếu thành công 0 nếu thất bại |
Xóa section hoặc key | IniDelete ( "filename", "section" [, "key"] ) | filename: đường dẫn file section: tên section cần xóa key (tùy chọn): tên key cần xóa |
1 nếu thành công 0 nếu thất bại |
Một số ví dụ cơ bản:
$file = @ScriptDir&'\EckOp.ini'
IniWrite($file,'ECKOP','FullScreen',1)
IniWrite($file,'ECKOP','AllowFullScreen',0)
IniRenameSection($file,'ECKOP','SETTING')
IniDelete($file,'SETTING','AllowFullScreen')
$text_1 = IniRead($file,'SETTING','FullScreen','Không tìm thấy')
$text_2 = IniRead($file,'SETTING','AllowFullScreen','Không tìm thấy')
MsgBox(64,'Thông báo','Full Screen: '&$text_1&' - Allow Full Screen: '&$text_2)
FileDelete($file)
IniWrite($file,'ECKOP','FullScreen',1)
IniWrite($file,'ECKOP','AllowFullScreen',0)
IniRenameSection($file,'ECKOP','SETTING')
IniDelete($file,'SETTING','AllowFullScreen')
$text_1 = IniRead($file,'SETTING','FullScreen','Không tìm thấy')
$text_2 = IniRead($file,'SETTING','AllowFullScreen','Không tìm thấy')
MsgBox(64,'Thông báo','Full Screen: '&$text_1&' - Allow Full Screen: '&$text_2)
FileDelete($file)
II. TƯƠNG TÁC VỚI HỆ THỐNG
1) Macro
Có rất nhiều Macro, mang nhiều giá trị về thông tin hệ thống như ngày, giờ, tháng, năm hiện tại, phiên bản Windows, các thư mục temp, systemp, homedrive,...Các bạn có thể tham khảo đầy đủ các macro trên file help của AutoIT hoặc tại đây: https://www.autoitscript.com/autoit3/docs/macros.htm
Riêng loạt tutorial này, tôi sẽ giới thiệu 1 số macro cơ bản mà ít nhiều bạn sẽ cần nó:
Các macro trả về đường dẫn thư mục:
@DesktopDir: trả về đường dẫn thư mục Desktop @FavoritesDir: trả về đường dẫn thư mục Favorites @HomeDrive: trả về tên ổ đĩa cài hệ điều hành @MyDocumentsDir @ProgramFilesDir @ScriptDir: trả về đường dẫn thư mục chứa Sciprt @SystemDir @TempDir @WindowsDir |
Các macro trả về thông tin máy tính
@ComputerName @DesktopHeight @DesktopWidth @HOUR: trả về giờ hiện tại (theo format 24 giờ) @MIN: phút hiện tại @SEC: giây hiện tại @MSEC: mili giây hiện tại @WDAY: trả về thứ tự ngày hiện tại trong tuần (theo format 1 tới 7) @MDAY: trả về thứ tự ngày hiện tại trong tháng (theo format 1 tới 31) @YDAY: trả về thứ tự ngày hiện tại trong năm (theo format 1 tới 366) @MON: tháng hiện tại @YEAR: năm hiện tại ; thông tin về hệ điều hành @OSBuild @OSLang @OSServicePack @OSType @OSVersion |
Sử dụng macro thế nào? Macro bản thân nó đã trả về giá trị nên bạn cứ sử dụng bình thường như biến, ví dụ nhé:
MsgBox(64,'Thông báo','Phiên bản OS: '& @OSVersion)
2) Một số hàm cơ bản tương tác hệ thống:
Bắt đầu từ mục này, các bạn tham khảo file help nhé, không phải vì mình lười giải thích cặn cẽ, mà mình đang tập cho các bạn thói quen tra cứu file help để sau này tự nghiên cứu các hàm khác ^^.Hàm Run và RunWait: tương tự như hộp thoại Run của Windows, riêng với RunWait có chức năng chờ cho tiến trình được Run xong mới chạy tiếp
Run("notepad")
RunWait("notepad")
RunWait("notepad")
Hàm ShellExecute và ShellExecuteWait: khác Run ở chỗ, hàm này chỉ cần bỏ đường dẫn file vào là nó chạy file đó, có thể chạy được luôn cả đường dẫn web.
ShellExecute("D:\my_other_program.exe")
ShellExecuteWait("http://eckop.tk")
ShellExecuteWait("http://eckop.tk")
Hàm ProcessClose, ProcessExists: tắt process / ứng dụng hoặc kiểm tra sự tồn tại của process ứng dụng đó
RunWait("notepad")
If ProcessExists("notepad.exe") Then
ProcessClose("notepad.exe")
EndIf
If ProcessExists("notepad.exe") Then
ProcessClose("notepad.exe")
EndIf
Hàm tương tác Registry: RegDelete, RegWrite, RegRead. Tìm hiểu về Registry tại đây
Hàm Shutdown: tắt hoặc restart hoặc log off máy tính.
Hàm WinExists, WinSetTitle, WinSetOnTop,...: các hàm tương tác với cửa sổ ứng dụng
Hàm Mouse Control (Mouse move, mouse click,...): tự động hóa thao tác chuộtHàm Send: gửi tới máy tính một ký tự
RunWait("notepad")
Send('Hi, day la ham send')
Send('Hi, day la ham send')
Và còn rất nhiều hàm khác mà mình không thế giới thiệu hết được ^^ Trong quá trình tìm hiểu, chúng ta sẽ làm quen sau.
III) THỰC HÀNH
Như thường lệ, để hiểu rõ hơn về hàm và để ôn lại bài cũ, chúng ta sẽ có bài tập nho nhỏ như sau được nâng cấp lên từ bài tập cũ ^^Đề bài toán: Người dùng viết một file txt theo 3 dòng, dòng 1 chứa tham số flag bảng thông báo, dòng 2 chứa tiêu đề và dòng 3 chứa nội dung bảng thông báo. Hãy sắp xếp các nội dung này vào lại một file INI với section là MSGBOX và hiển thị MSGBOX đó lên thông qua func.
Các bạn hãy tập suy nghĩ rồi làm trước khi xem lời giải nhé ^^
1 nhận xét:
nhận xét[Học Autoit] Bài 3: Các Hàm Tương Tác Windows Trong Autoit - Opdo'S Blog >>>>> Download Now
Reply>>>>> Download Full
[Học Autoit] Bài 3: Các Hàm Tương Tác Windows Trong Autoit - Opdo'S Blog >>>>> Download LINK
>>>>> Download Now
[Học Autoit] Bài 3: Các Hàm Tương Tác Windows Trong Autoit - Opdo'S Blog >>>>> Download Full
>>>>> Download LINK