[Học AutoIT] Bài 3: Các hàm tương tác Windows trong AutoIT


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
Một số ví dụ:

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

Các bạn để ý, các @ScriptDir và @TempDir tôi sử dụng. Đó được gọi là các Macro, có rất nhiều Macro và chức năng của nó là trả về một giá trị nào đó. Ví dụ đối với:

@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.

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
Các hàm lấy thông tin file
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)

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

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_2IniRead($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")

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")

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

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ột
Hàm Send: gửi tới máy tính một ký tự
RunWait("notepad")
Send('Hi, day la ham send')
Hàm Shutdown: tắt hoặc restart hoặc log off máy tính.
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é ^^



MẸO HỌC LẬP TRÌNH: Đừng copy những code trên, hãy đọc, hiểu và thực hành lại bằng chính bàn tay code của bạn, kèm theo đó là hãy thực hành nhiều hơn nữa, hãy suy nghĩ ra những hướng giải khác, hãy nâng bài toán lên một mức khó mới, và bạn sẽ thành công ^^

Xin chào, mình là opdo - một đứa mê những dòng code vô tận. Rất cám ơn vì bạn đã ghé thăm blog của mình ^^. Hi vọng được bạn ủng hộ để blog mình phát triển hơn

Share this

Related Posts

Previous
Next Post »

1 nhận xét:

nhận xét
Nặc danh
lúc 18:18 27 tháng 3, 2022 delete

[Học Autoit] Bài 3: Các Hàm Tương Tác Windows Trong Autoit - Opdo'S Blog >>>>> Download Now

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

Reply
avatar