179
GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ lập trình được cung cấp miễn phí, có dạng kịch bản giống như BASIC được thiết kế để tự động hóa các GUI (Graphic User Interface : giao diện người dùng) và các thao tác thường dùng. Nó là sự phối hợp của việc gilập nhấn phím , di chuyển chuột và thao tác trên cửa sổ/control (control là các đối tượng tương tác được trên cửa sổ, ví dụ như là button - nút bấm) để thực hiện tự động các tác vụ theo cách thức mà các ngôn ngữ khác không thể làm hoặc làm không chuẩn xác. AutoIt có dung lượng rất nhỏ gọn, có thể chạy độc lập trên tất cả các phiên bản của Windows mà không cần các runtime để làm nền. Tuy nhiên, ktừ phiên bản v3.3, AutoIt đã không còn hỗ trợ cho Windows 9x và Win NT 4.0. Ban đầu AutoIt được thiết kế để tự động cấu hình cho hàng ngàn máy PC. Theo thời gian, AutoIt trở thành một ngôn ngữ đầy sức mạnh với sự hỗ trợ các biểu thức phức tạp, hàm do người dùng tự định nghĩa, các vòng lặp và mọi thứ mà một người lập trình kịch bản dày dặn mong đợi. Ở đây là các tính năng chính : Dễ học vì các cú pháp đơn giản Giả lập được việc nhấn phím và di chuyển chuột Thao tác được với các tiến trình và cửa sổ Tương tác được với các control trên cửa sổ File mã có thể được biên dịch thành một file thi hành duy nhất Cho phép tạo GUI - giao diện người dùng Hỗ trợ COM (Component Object Model) Hỗ trợ biểu thức thông thường Gọi một cách có định hướng các DLL mở rộng và các hàm API Tài li ệu chi tiết và cộng đồng rộng hỗ trợ lớn Tương thích với tất cả phân hệ của Windows Hỗ trợ Unicode và x64

GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Embed Size (px)

Citation preview

Page 1: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

GIỚI THIỆU VỀ AUTOIT

AutoIt v3 là một ngôn ngữ lập trình được cung cấp miễn phí, có dạng kịch bản

giống như BASIC được thiết kế để tự động hóa các GUI (Graphic User Interface :

giao diện người dùng) và các thao tác thường dùng. Nó là sự phối hợp của việc giả

lập nhấn phím , di chuyển chuột và thao tác trên cửa sổ/control (control là các đối

tượng tương tác được trên cửa sổ, ví dụ như là button - nút bấm) để thực hiện tự

động các tác vụ theo cách thức mà các ngôn ngữ khác không thể làm hoặc làm

không chuẩn xác. AutoIt có dung lượng rất nhỏ gọn, có thể chạy độc lập trên tất cả

các phiên bản của Windows mà không cần các runtime để làm nền. Tuy nhiên, kể

từ phiên bản v3.3, AutoIt đã không còn hỗ trợ cho Windows 9x và Win NT 4.0.

Ban đầu AutoIt được thiết kế để tự động cấu hình cho hàng ngàn máy PC. Theo

thời gian, AutoIt trở thành một ngôn ngữ đầy sức mạnh với sự hỗ trợ các biểu thức

phức tạp, hàm do người dùng tự định nghĩa, các vòng lặp và mọi thứ mà một người

lập trình kịch bản dày dặn mong đợi.

Ở đây là các tính năng chính :

Dễ học vì các cú pháp đơn giản

Giả lập được việc nhấn phím và di chuyển chuột

Thao tác được với các tiến trình và cửa sổ

Tương tác được với các control trên cửa sổ

File mã có thể được biên dịch thành một file thi hành duy nhất

Cho phép tạo GUI - giao diện người dùng

Hỗ trợ COM (Component Object Model)

Hỗ trợ biểu thức thông thường

Gọi một cách có định hướng các DLL mở rộng và các hàm API

Tài liệu chi tiết và cộng đồng rộng hỗ trợ lớn

Tương thích với tất cả phân hệ của Windows

Hỗ trợ Unicode và x64

Page 2: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Làm việc với User Account Control (UAC) trên Vista

AutoIt được thiết kế sao cho nhỏ nhất có thể và không cần dùng đến các file DLL

mở rộng hoặc Registry để nó có thể an toàn khi chạy trên các Server. Các file

script (mã, kịch bản) có thể được biên dịch thành file exe với công cụ Aut2Exe.

Sự kết hợp các COM và DLL từ việc gọi AutoItX cho phép bạn thêm các tính năng

độc nhất vào các đoạn script hay ngôn ngữ lập trình yêu thích.

CẤU TRÚC THƯ MỤC CÀI ĐẶT AUTOIT

Các file và thư mục Miêu tả

(Thư mục cấp trên)

AutoIt3.exe Chương trình chính của AutoIt để chạy các file script

AutoIt3_x64.exe Phiên bản x64 của AutoIt (nếu có cài đặt).

AU3Info.exe AutoIt Window Info Tool – cung cấp thông tin từ cửa

sổ.

AU3Info_x64.exe Phiên bản x64 của AutoIt (nếu có cài đặt).

AU3Check.exe Trình kiểm tra cú pháp.

AutoIt.chm File trợ giúp, sử dụng AutoIt3.chm và UDFs3.chm

Uninstall.exe Trình gỡ bỏ AutoIt

AutoIt v3 Website.url Shortcut để truy cập vào website

: http://www.autoitscript.com/autoit3/

Aut2Exe

Icons\ Chứa các icon (*.ico) để dùng cho file au3.

Aut2Exe.exe Trình biên dịch file nguồn thành file exe

Page 3: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Aut2Exe_x64.exe Phiên bản x64 của AutoIt (nếu có cài đặt).

AutoItSC.bin Mẫu có thể thực thi cho mã đã được biên dịch

AutoItSC_x64.bin Mẫu có thể thực thi x64 cho mã đã được biên dịch.

UPX.exe Trình nén UPX để nén kích thước của file mã khi dịch

sang file exe

Examples

GUI\ Các ví dụ về GUI được viết trong AutoIt.

Helpfile\ Chứa các file script ví dụ được dùng trong file help

Extras

AutoUpdateIt\ Chứa một script giúp cho việc cập nhật phiên bản mới

của AutoIt3.

Editors\ Chứa các định nghĩa màu cú pháp cho vài trình soạn

thảo phổ biến.

Exe2Aut\ Chứa các công cụ chuyển file exe sang file script

nguồn.

SQLite\ Chứa tiện ích dòng lệnh SQLite và file trợ giúp

v2_to_v3_Converter\ Chứa công cụ giúp chuyển đổi cú pháp AutoIt từ

v2.64 sang AutoIt v3.

Icons

Chứa icon được dùng cho file au3

Include

Chứa các file thư viện với các hàm được định nghĩa sẵn

Page 4: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

AutoItX

Chứa một phiên bản DLL của AutoIt v3 để cung cấp một tập hợp con các tính

năng của giao diện ActiveX/COM và DLL.

SciTe

Chứa trình biên soạn văn bản SciTe để viết script

Xin nhắc lại là để chạy được các đoạn script của AutoIt, chỉ yêu cầu có file

AutoIt3.exe. Nếu bạn biên dịch một file script sang file có thể thực thi thì người

dùng khác không cần phải cài đặt AutoIt mà vẫn có thể chạy được file script đã

biên dịch.

(Ngoại lệ : dưới Windows NT4, file PSAPI.dll thì cần thiết trong đường dẫn hoặc

trong thư mục cài đặt AutoIt cho các hàm Process…() làm việc.)

VIẾT SCRIPT

Trong AutoIt đã được tích hợp sẵn trình soạn thảo SciTe cho phép ta viết và chạy

các đoạn script một cách tự động. Tuy nhiên đây là bản rút gọn cho nên đã được

lượt bỏ vài tính năng và công cụ bổ sung. Phiên bản đầy đủ các bạn có thể tải về từ

http://www.autoitscript.com/autoit3/scite/.

Ở đây tôi xin nói thêm vài điểm lưu ý trong việc soạn mã.

Khi viết script trong SciTe, bạn cần phải lưu lại trước khi nhấn

phím F5 để chạy. File nguồn có đuôi là au3.

Để viết và hiển thị được tiếng Việt, bạn vào "File > Encoding" sau

đó chọn UCS -2 Little Endian hoặc UCS-2 Big Endian.

SciTe sẽ hiển thị các dòng lệnh của bạn với nhiều màu sắc khác

nhau, tùy theo thành phần cú pháp. Nếu bạn cảm thấy các màu sắc hiển thị

không vừa ý thì có thể sử dụng công cụ SciTeConfig để chỉnh lại. Công cụ

Page 5: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

này có sắn trong phiên bản full của SciTe hoặc tải riêng lẻ từ

www.autoitscript.com.

Nếu bạn không thích dùng SciTe để soạn script thì có thể dùng các

công cụ biên soạn miễn phí khác như Crimson Editor

(http://www.crimsoneditor.com/) hoặc Source Edit

(http://www.sourceedit.com/) nhưng sẽ phải thực hiện cấu hình việc khai

báo chương trình chạy file au3 và trình biên dịch.Các file cú pháp được viết

sẵn do AutoIt cung cấp có thể dùng cho nhiều trình soạn thảo và chúng được

chứa trong trong thư mục Extra (...\AutoIt v3\Extra)

BIÊN DỊCH FILE SCRIPT THÀNH FILE EXE

Khi biên dịch một file script thành file exe, bạn có thể yên tâm rằng nó sẽ chạy

được trên mọi máy tính cài hệ điều hành Windows mà không cần bất cứ một

runtime nào để làm nền. Bởi vì tất cả các #include cũng sẽ được nén, mã hóa và

kết hợp vào trong một file duy nhất. Nhưng bạn cần phải chắc chắn một điều rằng

file script của bạn không có lỗi cú pháp, bởi vì compiler không thực hiện kiểm tra

cú pháp khi biên dịch sang file *.exe.

Muốn thực hiện việc biên dịch file script, có 3 cách :

Cách 1 : Bạn cần gọi công cụ Aut2Exe. Vào menu "Start > All programs >

AutoIt v3 > Compile scritpt to exe" và làm theo hướng dẫn của mẫu form. Error!

Page 6: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ
Page 7: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Cách 2 : Từ trình soạn thảo SciTe bạn vào Tool > Compile hoặc nhấn Ctrl +

F7

Cách 3 : Nhấp phải chuột vào file nguồn (au3) và chọn Compile Script. Error!

Ở cách 2 và 3, file thi hành sẽ được tạo ra ngay tại thư mục chứa file nguồn. Ngoài

ra còn có thêm một cách biên dịch khác là dùng command promt để gọi aut2exe

với các tham số chỉ định. Cách này khá dài dòng và phức tạp nên không đề cập ở

đây.

CÁC TOÁN TỬ

AutoIt hỗ trợ các toán tử gán, tính số học, so sánh, và logic.

Toán tử Miêu tả

= Phép gán. Vd : $var = 5 (gán 5 vào biến $var)

+= Tăng. Vd : $var += 2 (tăng biến $var lên 2 đơn vị, tương đương với

$var = $var+2)

-= Giảm. Vd : $var -= 1 (giảm biến $var xuống 1 đơn vị, tương đương

$var = $var -1)

*= Nhân.

/= Chia

&= Nối thêm chuỗi. Vd : $var = "one", và sau đó $var &= 10 ($var sẽ

bằng "one10" )

Page 8: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

+ Cộng hai số. Vd : 10 + 20 (bằng 30)

- Trừ hai số. Vd : 20 - 10 (bằng 10)

* Nhân hai số. Vd : 20 * 10 (bằng 200)

/ Chia hai số. Vd : 20 / 10 (bằng 2)

& Ghép hai chuỗi với nhau. Vd : "one" & 10 (bằng "one10" )

^ Lũy thừa. Vd : 2 ^ 4 (bằng 16)

=

So sánh bằng (không phân biệt chữ hoa và chữ thường khi so sánh

chuỗi). Vd : If $var= 5 Then (trả về true nếu biến $var mang giá trị

5)

== So sánh bằng (có phân biệt chữ hoa, chữ thường khi so sánh chuỗi.

<> Khác hoặc Không bằng.

> Lớn hơn.

>= Lớn hơn hoặc bằng

< Nhỏ hơn

<= Nhỏ hơn hoặc bằng

AND Logic Và (cả hai). Vd : If $var = 5 AND $var2 > 6 Then (Điều kiện

trả về True nếu $var bằng 5 Và $var2 lớn hơn 6 )

OR Logic Hoặc. Vd : If $var = 5 OR $var2 > 6 Then (Trả về True nếu

$var bằng 5 Hoặc $var2 lớn hơn 6)

NOT Logic Phủ định. Vd : NOT 1 (trả về False)

Page 9: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Nếu trong biểu thức cần xử lý có sử dụng nhiều toán tử thì chúng sẽ được thực

hiện theo thứ tự trước sau. Việc tính toán thường được thực hiện từ trái qua phải và

tuân theo các qui tắc chung của đại số. Bên dưới là thứ tự ưu tiên của các toán tử :

NOT

^

* /

+ -

&

< > <= >= = <> ==

AND OR

Ví dụ : 2 + 4 * 10 sẽ có kết quả là 42:

Bởi vì phép nhân * có ưu tiên cao hơn phép cộng + , nên 4 * 10 (bằng 40) và 2 + 40 (bằng 42).

Để có kết quả tính toán chính xác bạn nên sử dụng cặp dấu ngoặc đơn ( ) để nhóm

các biểu thức con một cách thích hợp.. Mặc dù không được đề cập, song, dấu

ngoặc đơn là toán tử có độ ưu tiên cao nhất trong tất cả các toán tử.

Vd : (2 + 4) * 10 bằng 60. NOT (12+3)/5 sẽ bằng 0

Đối với toán tử logic AND, OR, ta có ví dụ sau :

Vd 1 : If MyFunc1() OR MyFunc2() Then

(MyFunc2() sẽ không được gọi nếu như MyFunc1() trả về True)

Vd 2 : If MyFunc1() AND MyFunc2() Then

Page 10: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

(MyFunc2() sẽ không được gọi nếu MyFunc1() trả về False)

KIỂU DỮ LIỆU

Trong AutoIt chỉ có một loại dữ liệu gọi là Variant (tạm dịch là biến). Một biến có

thể chứa dữ liệu theo kiểu chuỗi (string) hoặc là kiểu số (number) tùy vào tình

huống sử dụng. Ví dụ như nếu bạn nhân hai biến với nhau thì lúc này biến có kiểu

number, còn nếu bạn sử dụng phép toán ghép chuỗi với hai biến thì chúng sẽ được

đối xử như các chuỗi ký tự.

Ví dụ :

10 * 20 sẽ bằng số 200 (* là nhân hai biến với nhau)

10* "20" cũng sẽ bằng số 200

hoặc "10" * "20" cũng bằng số 200

10 & 20 sẽ trả về một chuỗi là "1020" (& là phép toán ghép chuỗi)

Nếu một chuỗi được sử dụng như một số, một phép gọi hàm Number()nên được

thực hiện. Và nếu như ký tự đầu tiên của chuỗi không phải là một ký số thì sẽ trả

về một số 0. Ví dụ :

10 * "abc" sẽ trả về số 0

10* number("abc") cũng trả về 0

10* number("25ghj") sẽ trả về 250

Nếu một chuỗi được sử dụng trong kiểu boolean (True/False) và nó là một chuỗi

rỗng "" thì sẽ được xem như bằng 0 (False).

KIỂU SỐ - NUMBER

Number có thể là số thập phân như : 3, 5.642 và -8

cũng có thể là số thập phân theo dạng khoa học, ví dụ như 1.5e3 sẽ thay cho 1500

(vì 1.5*10^3)

hay hệ thập lục phân (hexa) : 0x409 hoặc 0xff4a.

Chú ý :

Page 11: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Hệ hexa trong AutoIt phải bắt đầu với 0x và theo sau là các ký số từ 0 đến

9 hoặc/và các ký tự a, b, c, d, e, f.

Khi tính toán các biểu thức số, bạn không cần quan tâm đến việc giới hạn

của kiểu dữ liệu. Nếu kết quả là số nguyên, AutoIt sẽ trả về cho bạn số

nguyên. Nếu kết quả là số thập phân, AutoIt sẽ trả về giá trị thập phân. Ở dạng

thập phân, giá trị lớn nhất có thể chứa là (264 - 1)/2.

Một số hàm trong AutoIt chỉ làm việc với số nguyên 32 bit (mang giá trị

từ 0 đến 232 -1) và các số này sẽ được chuyển đổi tự động, tùy vào hàm sử

dụng. Ví dụ như BitAnd.

KIỂU CHUỖI - STRING

Chuỗi ký tự được rào trong cặp dấu ngoặc kép " " hoặc cặp dấu nháy đơn ' '. Ví

dụ :

"this is a string"

' Welcome to AutoIt ! '

Mặc dù AutoIt hỗ trợ hai phương thức biểu diễn chuỗi nhưng khi sử dụng bạn phải

sử dụng thống nhất có trật tự, không thể bắt đầu rào chuỗi với dấu ngoặc kép, kết

thúc chuỗi với dấu nháy đơn và ngược lại. Ví dụ sau cho thấy chuỗi không hợp lệ :

" doctor for pc '(sẽ báo lỗi khi chạy)

Tuy nhiên, trong trường hợp bạn muốn nhấn mạnh một nội dung nào đó trong

chuỗi bằng dấu ngoặc kép hoặc dấu nháy đơn thì AutoIt cũng hỗ trợ việc trộn hai

dạng ký tự này. Và bạn phải nhớ tính trật tự và đầy đủ trong khi sử dụng. Ví dụ :

' It is a "black" web '

"This "sentence" contains "lots" of "double-quotes". "

" It 's a dog "

nhưng ' it 's a dog ' (là một chuỗi bị lỗi)

Page 12: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Một biến kiểu chuỗi có thể chứa đến 2,147,483,647 ký tự (tương đương với 1651

quyển sách dày 500 trang, mỗi trang có 40 dòng, mỗi dòng có 65 ký tự)

KIỂU BOOLEAN

Kiểu boolean chỉ mang hai giá trị đúng hoặc sai (True/False). Trong nhiều trường

hợp sử dụng thì một kiểu boolean trả về False khi giá trị của biến đó là 0 hoặc là

chuỗi rỗng "". Tất cả các trường hợp khác 0 đều được xem như True, theo mặc

định thì True bằng 1. Thông thường, các phép toán logic AND, OR hoặc NOT

thường được dùng với kiểu boolean trong việc thẩm định điều kiện.

Ví dụ :

$b1 = true

$b2 = false

$b3 = $b1 And $b2--> ($b3 sẽ bằng False)

$b2 = 5

$b3 = $b1 And $b2--> ($b3 sẽ bằng True)

$b3 = $b1 + $b2 --> ($b3 sẽ bằng 6)

$b3 = NOT $b3 --> ($b3 sẽ bằng 0)

Trong trường hợp bạn xử lý một biến boolean như một chuỗi thì :

một boolean là true sẽ chứa chuỗi "True"

một boolean là false sẽ chứa chuỗi "False"

ví dụ :

$b1 = true

$str = "test is : "

$string = $str & $b1 ($string sẽ chứa chuỗi "Test is : True")

KIỂU NHỊ PHÂN - BINARY

Kiểu binary có thể lưu giữ mọi byte giá trị, chúng được chuyển đổi sang dạng hexa

khi lưu trong một biến chuỗi. Ví dụ :

Page 13: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

$bin = Binary("abc")

$str = string($bin) --> "0x616263"

KIỂU CON TRỎ - POINTER

Kiểu con trỏ dùng để lưu trữ địa chỉ bộ nhớ 32 bit hoặc 64 bit tùy vào phiên bản

AutoIt được sử dụng. Thực chất con trỏ là một số nguyên chỉ định vị trí của thành

phần dữ liệu nào đó trong bộ nhớ. Tuy nhiên, khi truy xuất trong AutoIt thì con trỏ

sẽ được lưu ở dạng hexa trong một biến kiểu chuỗi. Handle (tạm dịch là kênh hay

địa chỉ trong bộ nhớ) của cửa sổ được trả về bởi hàm WinGetHandle là một kiểu

con trỏ, mang giá trị ở dạng hexa. Nếu muốn xem ở dạng thập phân bình thường ta

dùng hàm Number .

-------------------------------- Mặc dù phần này trình bày nhiều kiểu dữ liệu mà AutoIt hỗ trợ nhưng trên thực

tế, bạn chỉ cần quan tâm đến hai kiểu chính đó là number và string. Đây chính là

hai kiểu dữ liệu thường dùng nhất khi viết script. Các kiểu khác dùng để tham khảo

cho biết chứ thực chất chúng cũng được tạo nên từ hai kiểu trên và thường chúng ít

khi được dùng đến. Nếu bạn đã là một người sành sỏi về lập trình thì việc này

không cần phải bàn.

DẠNG CHUNG

Một chương trình AutoIt do nhiều thành phần cấu thành, trong đó, biến, biểu thức,

hàm, macro,... đóng vai trò quan trọng. Tuy nhiên chúng chỉ là những "cá thể" độc

lập mang một chức năng nhất định. Tất cả chúng phải được kết hợp với nhau theo

một cách thức hợp lý thì ta sẽ có được một chương trình hoàn chỉnh. Các cách thức

đó do chính AutoIt qui định và một đoạn mã chạy được có dạng tổng quát như sau

:

<chỉ định thư viện>

<khai báo các biến>

<các câu lệnh, biểu thức>

Page 14: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

<các dòng miêu tả, ghi chú>

<gọi hàm hoặc định nghĩa hàm>

. . . .

Ví dụ :

; chương trình đơn giản hiện thông điệp hello world

; và welcome to autoit

Global $m

$m = "Hello world"

MsgBox(0, "My Msg", $m)

MsgBox(0, "Msg", "Welcome to AutoIt")

Tùy vào mục đích của người dùng mà các thành phần có thể có hoặc không trong

chương trình. Như ví dụ trên, ta thấy không có phần chỉ định thư viện bởi vì ta chỉ

sử dụng các hàm được thiết kế sẵn, luôn có trong chương trình chính (như hàm

MsgBox ). Thư viện chỉ cần thiết khi ta gọi các hàm mở rộng, thông thường là

trong việc thiết kế GUI (Graphic User Interface - giao diện người dùng) hoặc các

hàm tiện ích. Khai báo và sử dụng biến là cần thiết nếu như ta muốn lưu các dữ

liệu, giá trị để chương trình hoạt động. Và hàm, tất nhiên là không thể thiếu nếu

như bạn viết các chương trình phức tạp và có tần suất sử dụng lại nhiều lần một tác

vụ nào đó.

Ví dụ nêu trên chỉ là một đoạn mã đơn giản, nó không thể thể hiện hết tất cả các

chức năng trong AutoIt. Nhưng ta cũng phân tích sơ bộ để hiểu vấn đề. Hai dòng

lệnh đầu tiên là dòng ghi chú, thường dùng để miêu tả giải thích chức năng của

một đoạn mã hay câu lệnh nào đấy. Dòng thứ ba là khai báo biến. Dòng thứ tư là

gán giá trị cho biến. Hai dòng còn lại là gọi và sử dụng hàm hiển thị thông điệp.

THƯ VIỆN

Nói theo kiểu kỹ thuật, nếu rành về lập trình bạn có thể tự tạo ra một chương trình

hữu ích, có tác dụng chỉ chứa toàn những mệnh đề của chính bạn. Tuy nhiên điều

Page 15: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

này là hiếm hoi vì nó đòi hỏi rất nhiều công sức và thời gian. Với bất kỳ một ngôn

ngữ lập trình nào, không riêng gì AutoIt, những người tạo ra chúng đều cung cấp

cho chúng những chương trình con, mỗi chương trình con thực hiện một chức năng

nhất định mà ta thường gọi là hàm. Tập hợp tất cả các hàm này sẽ được chứa trong

một file thư viện, tùy vào lĩnh vực xử lý của hàm mà chúng được lưu trong các file

thư viện tương ứng. Ví dụ như thư viện Array chứa các hàm về quản lý mảng, thư

viện Sound chứa các hàm dùng để điều khiển âm thanh, thư viện Math cho các

hàm toán học....

Với AutoIt thì những người cài đặt trình biên dịch đã viết sẵn đa số các hàm chung

mà bạn sẽ dùng. Cho nên sẽ có rất nhiều hàm mà bạn có thể sử dụng, không cần

khai báo thư viện vì theo mặc định chúng là hàm chuẩn luôn được đưa vào chương

trình của bạn. Chỉ những hàm mà người ta liệt kê nó vào UDF (User Defined

Function - hàm do người sử dụng tạo sẵn, không phải hàm chuẩn) hoặc những hàm

nào có ghi chú thư viện thì bạn mới chỉ định thư viện khi viết chương trình. Nếu

thích bạn cũng có thể tạo một thư viện để chứa các hàm của riêng mình sau khi bạn

hiểu được AutoIt.

CÁC CHÚ Ý

Đây là những chú ý quan trọng mà bạn nên ghi nhớ để có thể sử dụng AutoIT một

cách hiệu quả.

AutoIt là một ngôn ngữ kịch bản hoạt động theo cách thông dịch, các lệnh

được đọc và thực hiện một cách tuần tự. Có nghĩa là đọc đến đâu thì thực

hiện đến đó, không đọc hết một lượt như các ngôn ngữ C hay Pascal.

AutoIt không có ký hiệu ngăn cách các câu lệnh với nhau, cho nên mỗi câu

lệnh phải được viết trên một dòng, câu lệnh thứ hai phải được viết ở dòng kế

tiếp (trong c và pascal thì sử dụng dấu chấm phẩy ; để ngăn cách các câu

lệnh)

Page 16: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

AutoIt không phân biệt chữ hoa và chữ thường đối với các lệnh được viết

(ngoại trừ Title của cửa sổ, xem phần Window Title). Ví dụ, biến $var,

$VAR và $VaR chỉ là một biến.

Tất cả các thành phần liên quan đến việc tạo và xử lý cửa sổ được AutoIt hỗ

trợ rất mạnh, chúng là các hàm chức năng tương ứng. Tuy nhiên, trong giới

hạn của ebook, tôi không thể hướng dẫn tất cả các hàm. Tham khảo và tự

dịch trong file help là một cách tự học hiệu quả.

Comment hay chú thích là thành phần rất hay dùng khi lập trình, đối với hầu

hết các ngôn ngữ chúng dùng để diễn đạt chức năng của một đoạn lệnh hay

đánh dấu nhằm dễ đọc, dễ quan sát đối với việc trình bày. Chúng không hề

có chức năng thi hành và sẽ được trình điều khiển bỏ qua khi đọc đến. Và

AutoIt hỗ trợ hai dạng chú thích. Chú thích theo dòng (sử dụng dấu chấm

phẩy để báo hiệu) và chú thích theo đoạn (sử dụng cặp #cs.. #ce) để rào các

dòng chú thích bên trong. Ví dụ :

; this is a first comment line

; this is a second comment

#cs

.......comment start

Comment 1

Comment 2

........

comment end

#ce

MsgBox(0, "msg", "Welcome to AutoIT")

KHAI BÁO BIẾN

Page 17: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Biến là một đại diện cho vùng địa chỉ nào đó trong bộ nhớ, mà ở đó dữ liệu được

lưu trữ. Tuy nhiên ở đây ta không đề cập đến vấn đề dữ liệu được chứa trong bộ

nhớ như thế nào. Ta chỉ cần biết, biến là một đại diện mang giá trị ta cần tính toán.

Trong AutoIt, một biến hợp lệ phải có tên được bắt đầu với ký tự $ và sau đó là các

ký tự alpha(a-z, A-Z), ký số (0-9) và dấu gạch dưới _. Ví dụ :

$var1 $my_variable $123 $String_temp

$abc@ $love.baby --> đây là hai biến không hợp lệ

Để khai báo một biến, biến đó phải được tạo với một trong các từ khóa Global,

Local hay Dim. Các từ khóa này có chức năng giới hạn phạm vi tồn tại và sử dụng

của biến. Ví dụ :

Global $var1, $title

Dim $m, $name

Global: chỉ định khai báo một biến có phạm vi toàn cục. Nghĩa là mọi nơi

trong chương trình đều có thể truy xuất, chỉnh sửa nội dung của biến

này. Và biến này sẽ tồn tại cho đến khi chương trình thoát ra. Ví dụ :

Global $m = "Hello world"

MsgBox(0, "MSG", $m)

_RepText()

MsgBox(0, "MSG", $m)

; định nghĩa hàm

Func _RepText()

$m &= ", " &$m

EndFunc

Đầu tiên ta tạo ra một biến $m và cho hiển thị nội dung của nó là " Hello world".

Sau đó hàm _RepText() được gọi để lặp lại nội dung của biến $m. Hàm MsgBox

thứ hai sẽ hiển thị "Hello world, Hello world". Do $m là biến toàn cục nên ta có

thể sửa đổi tùy ý giá trị của nó.

Page 18: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Local: chỉ định khai báo một biến có phạm vi cục bộ. Tức là nó chỉ được

phép sử dụng, thao tác ở phạm vi giới hạn trong chương trình, thường là

ở bên trong các hàm. Nó sẽ được khởi tạo khi hàm được gọi và sẽ bị

hủy khi hàm kết thúc. Những nơi khác trong chương trình không hề biết

sự tồn tại của biến Local này. Ví dụ :

; chương trình sau sẽ chạy command line

_ExeProg() ; sẽ thực thi cmd

Run($prog) ; dòng này sẽ báo lỗi

Func _ExeProg()

Local $prog = "cmd"

Run($prog)

EndFunc

Trong chương trình trên, sau khi hàm _ExeProg() được gọi và thực hiện xong thì

biến cục bộ $prog bị hủy, cho nên lệnh Run($prog) không được thực thi vì $prog

bên ngoài không mang một giá trị nào. Nói cách khác $prog bên trong hàm

_ExeProg và $prog bên ngoài hoàn toàn khác nhau.

Bạn chú ý một điều là, nếu bên trong một hàm, bạn khai báo một biến cục bộ cùng

tên với một biến toàn cục thì biến cục bộ sẽ được ưu tiên sử dụng thay vì biến toàn

cục. Khi nào tìm hiểu đến phần định nghĩa hàm, bạn sẽ hiểu rõ hơn về biến cục bộ.

Vì trong hàm rất thường sử dụng biến local để tính toán, lưu trữ giá trị.

Dim : Tạo ra một biến có phạm vi cục bộ (local) nếu như biến này chưa

được khai báo trước đó ở dạng toàn cục (global). Có nghĩa là :

Nếu khai báo biến bên ngoài hàm thì nó có phạm vi toàn cục.

Ví dụ :

; đoạn mã sau sẽ cho gọi calculator thay vì notepad

Dim $p = "notepad"

_modify()

Page 19: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Run($p)

Func _modify()

$p = "calc"

EndFunc

Nếu khai báo bên trong hàm thì phạm vi là cục bộ. Tuy nhiên, nếu biến Dim này

cùng tên với một biến Global, thì nội dung của biến Global sẽ bị viết đè. Điều

này bạn nên chú ý.

Ví dụ :

; đoạn mã này sẽ duyệt thư mục Temp thay vì thư mục Windows

Global $explore = "Explorer " & @WindowsDir

function()

Run($explore)

Func function()

Dim $explore = "Explorer " & @TempDir

EndFunc

Trong các ví dụ trên, ta thấy rằng việc khai báo một biến có thể kết hợp với việc

khởi tạo giá trị ban đầu cho biến đó. Theo mặc định, nếu bạn không gán giá trị khi

khai báo thì biến đó mang giá trị 0 (nếu sử dụng như một kiểu number) hoặc ""

(nếu sử dụng như một kiểu string).

Dù rằng AutoIt cho phép bạn sử dụng một biến không cần khai báo, nhưng sẽ thật

không hay khi chương trình của bạn có nhiều biến được tạo rải-rác ở nhiều nơi.

Tính trật tự và thống nhất sẽ không đạt hiệu quả vì bạn khó kiểm soát được các đối

tượng của mình trong hàng tá dòng lệnh đan xen nhau. Cũng xin nói thêm, nếu bạn

sử dụng một biến không có khai báo trước đó, tùy trường hợp vận dụng, thì hoặc là

chương trình sẽ báo lỗi, hoặc là biến đó sẽ được tạo tự động với phạm vi cục bộ

(Local). Nếu bạn khai báo một biến Local bên ngoài hàm thì nó vẫn có phạm vi

như Global.

Page 20: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Khi khai báo một biến, bạn nên chỉ định rõ phạm vi là Local hoặc Global, nên hạn

chế dùng Dim. Trừ khi bạn nắm rõ được tất cả các biến trong chương trình của

mình, nhằm tránh các lỗi về việc chỉnh sửa dữ liệu không mong muốn có thể xảy

ra.

KHAI BÁO HẰNG SỐ

Hằng số là một biến mang giá trị cố định và giá trị này chỉ được gán một lần khi

khởi tạo. Bất kỳ thao tác nào cố gắng thay đổi nội dung của hằng số đều là thao tác

không hợp lệ.

Việc khai báo hằng số cũng giống như việc khai báo biến, nhưng bạn cần đặt thêm

từ khóa Const. sau Dim, Global hoặc Local. Có dạng như sau :

Const $pi = 3.14 ; hằng số cục bộ

Local $text = "Hello" ; hằng số cục bộ

Global Const $e = exp(1) ; hằng số toàn cục

Chú ý : bạn không thể khai báo một hằng số trùng tên với một biến đang tồn tại.

KHAI BÁO MỘT MẢNG

Mảng thực chất là một tập hợp các biến có cùng kiểu dữ liệu được gọi chung

bằng một tên. Các biến trong một mảng thường được gọi là "phần tử" và được

truy cập đến bởi chỉ mục. Các mảng có thể có một hay nhiều chiều, thông

dụng nhất là mảng một chiều (danh sách) và mảng hai chiều (ma trận gồm

hàng và cột).

MẢNG MỘT CHIỀU (DANH SÁCH)

Mảng một chiều là dãy gồm nhiều mục liên tiếp nhau. Bạn cứ hình dung nó như

là một cái danh sách. Cũng có số thứ tự, cũng có thông tin (dữ liệu) ứng với thứ tự

đó.

Hình thức cơ bản cho việc khai báo mảng một chiều là :

<scope> <var_name>[<size>]

<scope> : cho biết đây là biến Local, Global hay Dim

Page 21: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

<var_name> : là tên biến đại diện cho tất cả các phần tử trong mảng.

Tuân thủ theo các qui tắc đặt tên như khai báo biến.

<size> : cho biết có tối đa bao nhiêu phần tử sẽ chứa trong mảng.

Ví dụ như, để khai báo một mảng toàn cục có 100 phần tử gọi tên là List và sau đó

gán các giá trị cho mảng, ta sử dụng câu lệnh : Error! Global List[100]

List[0] = "Ant"

List[1] = "Bird"

List[2] = "Cat"

.....

List[99] = "Zebra"

Trong AutoIt, chỉ mục đầu tiên của mảng phải bắt đầu từ 0. Với ví dụ trên, nếu ta

dùng List[0], List[1] là ta đang truy cập đến phần tử thứ nhất, thứ hai. Dùng

List[99] là ta đang truy cập đến phần tử thứ 100. Việc sử dụng chỉ mục vượt quá

chỉ mục tối đa cho phép khi khai báo là không hợp lệ.

Muốn lấy một giá trị từ một phần tử trong mảng, ta phải biết được chỉ mục của

phần tử chứa giá trị đó. Ví dụ :

$animal = $List[2] ; $animal sẽ chứa chuỗi "Cat"

MẢNG HAI CHIỀU (MA TRẬN)

Một mảng hai chiều chính là một ma trận được tạo thành bởi hàng và cột. Nếu bạn

đã biết qua Excel thì bảng tính trong Excel chính là một ma trận. Hình thức chung

cho việc khai báo mảng hai chiều cũng tương tự như mảng một chiều, nhưng có

thêm việc khai báo chỉ mục thứ hai. Trong mảng hai chiều, chỉ mục thứ nhất cho

biết hàng và chỉ mục thứ hai là cột.. Cụ thể là :

<scope> <var_name> [<size_row>][<size_column>]

Trong đó :

Page 22: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ
Page 23: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

<scope> cũng dùng để chỉ định phạm vi

<var_name> chỉ định tên mảng

<size_row> chỉ định số dòng tối đa

<size_column> chỉ định số cột tối đa

Ví dụ : Error! Dim $matrix[2][3] ; tạo một ma trận có 2 dòng và 3 cột

$matrix[0][0] = 2

$matrix[0][1] = 4

$matrix[0][2] = 6

$matrix[1][0] = 1

$matrix[1][1] = 3

$matrix[1][2] = 5

Để truy cập đến một phần tử trong mảng ta cũng sử dụng chỉ mục cho dòng và cột.

Ví dụ :

; đang truy cập đến phần tử ở dòng thứ nhất, cột thứ hai.

$n = $matrix[0][1] ; $n sẽ bằng 4

CÁC VẤN ĐỀ LIÊN QUAN

Vấn đề 1 : Khởi tạo giá trị cho mảng

Khi khai báo một mảng bạn cũng có thể khởi tạo giá trị cho các phần tử bên trong

mảng. Các giá trị khi khởi tạo cho mảng phải được nằm trong cặp dấu ngoặc vuông

[ ], và mỗi giá trị phải được ngăn cách bởi dấu phẩy. Đối với mảng hai chiều thì

cần thêm một cặp dấu ngoặc vuông khác để rào các giá trị có cùng chỉ mục dòng.

Ví dụ :

Dim $array[5] = [10, 20, 30, 40, 50]

Local $test[4] = ["a", "Hello", 500, 4.55]

Global $Grid[2][3] = [["sun", "moon", "earth"], [1000, cos(0), sqrt(900)]]

Page 24: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Vấn đề 2 : Lấy tổng số phần tử hiện có trong mảng

Sẽ có không ít tình huống bạn tiếp nhận và xử lý một mảng có nhiều phần tử bên

trong. Tuy nhiên có một rắc rối là bạn không biết mảng này hiện đang có bao nhiêu

phần tử, vì nó thay đổi theo chu kỳ hay một lý do nào đó. Với trường hợp này, sử

dụng hàm UBound là một lời giải vì nó sẽ cho biết một mảng được chỉ định có bao

nhiêu phần tử. Cú pháp như sau :

UBound( $array, $dimension)

Trong đó,

$array : là tên của một biến mảng

$dimension : cho biết cần lấy ở chiều thứ mấy. Mặc định là 1, tức mảng một

chiều. Nếu gán bằng 0, thì UBound không trả về tổng số phần tử hiện có, mà sẽ trả

về một số tương ứng với số chiều của mảng.

Ví dụ :

Dim $myArray[10][20] ;element 0,0 to 9,19

$rows = UBound($myArray) ; lấy chiều thứ nhất

$cols = UBound($myArray, 2) ; lấy chiều thứ hai

$dims = UBound($myArray, 0) ; lấy số chiều của mảng

$info = "This Array has " & $dims &" dimension(s) : " &@CRLF & _

$rows & " rows, " & $cols & " columns"

MsgBox(0, "Msg of Array", $info)

Dấu _ đặt ở cuối dòng lệnh $info = ... cho biết, phần tiếp theo của dòng lệnh hiện

hành được viết ở dòng kế tiếp. Thông thường việc này xảy ra do một lệnh quá dài,

khi viết trên một dòng thì vượt quá trang màn hình, rất khó quan sát. Cho nên cách

này được dùng như một giải pháp.

Vấn đề 3 : Thiết lập lại kích thước của một mảng

Theo qui định, nếu muốn sử dụng một biến mảng thì trước đó phải khai báo tên, số

chiều và kích thước tối đa để chứa các phần tử. Trong trường hợp bạn muốn định

Page 25: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

lại kích thước cho mảng đó (tăng hoặc giảm kích thước) thì việc bạn cần làm là sử

dụng từ khóa ReDim . Cú pháp chung :

ReDim $array [new index 1] ... [new index n]

$array : là tên của mảng cần định lại kích thước

New index : kích thước mới cho tổng số phần tử đối đa sẽ có trong mảng. [new

index n] áp dụng cho chiều thứ n của mảng.

Bạn xem ví dụ sau để hiểu rõ hơn cách thức làm việc. Đoạn mã bên dưới sẽ minh

họa việc thiết lập lại kích thước tối đa cho mảng một chiều.

; khai báo kích thước ban đầu

Dim $a[5] = [2, 4, 6, 8, 10]

ConsoleWrite("Before : ")

For $i=0 to UBound($a)-1

ConsoleWrite($a[$i] & " ")

Next

; Định lại kích thước mảng

ReDim $a[3]

ConsoleWrite(@crlf & "After rediming : " )

For $i=0 To 2

ConsoleWrite($a[$i] & " ")

Next

Đầu tiên ta khai báo mảng $a có năm phần tử, sau đó dùng vòng lặp For thứ nhất

để in nội dung ra console. Đến dòng lệnh ReDim $a[3] sẽ định lại kích thước của

mảng từ ban đầu là năm phần tử xuống còn ba phần tử. Khi kích thước mới nhỏ

hơn kích thước cũ, thì phần nội dung phía sau sẽ bị cắt bỏ. Cho nên vòng lặp For

thứ hai sẽ chỉ in các giá trị 2, 4 và 6.

Page 26: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Chú ý : Khi thiết lập lại kích thước cho một biến mảng, nếu bạn thay đổi số chiều

của mảng từ mảng một chiều thành hai chiều, hoặc ngược lại, thì tất cả dữ liệu

đang có trong mảng sẽ bị xóa hoàn toàn.

Vấn đề 4 : Các chú ý

+ Chỉ mục của mảng có thể là một biến hoặc một biểu thức, sao cho nó trả về một

chỉ mục hợp lệ. Vì thế bạn có thể làm nhiều cách khác nhau để truy xuất đến các

phần tử bên trong mảng. Cũng xin nhắc lại rằng, tất cả các mảng đều có 0 làm chỉ

mục cho phần tử thứ nhất.

Ví dụ sau minh họa cho việc khởi tạo các giá trị ngẫu nhiên cho mảng một và hai

chiều.

; khởi tạo và in giá trị cho mảng một chiều

Dim $a[10]

ConsoleWrite("---- A list : "& @crlf)

For $i=0 To 9

$a[$i] = Int(Random(0, 100))

ConsoleWrite($a[$i] & " ")

Next

; khởi tạo và in giá trị cho mảng hai chiều

Dim $m [4] [5]

ConsoleWrite(@crlf & "---- A matrix : " & @crlf)

For $i=0 To 3

For $j=0 to 4

$m[$i][$j] = Int(Random(0,10))

ConsoleWrite($m[$i][$j] & " ")

Next

ConsoleWrite(@crlf)

Next

Page 27: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

+ Theo lý thuyết, các phần tử trong mảng phải có cùng kiểu dữ liệu, hoặc là số,

hoặc là chuỗi. Nhưng trong AutoIt, một mảng có thể chứa mọi thứ, từ một số cho

đến một boolean. Nói đơn giản là có thể chứa các phần tử có kiểu dữ liệu khác

nhau. Tuy nhiên, điều này không được khuyến khích. Ví dụ :

$arr[0] = 1

$arr[1] = true

$arr[2] = "my text"

$arr[3] = $another_array

+ Một mảng trong AutoIt chỉ cho phép chứa tối đa 224 (16 777 216) phần tử.

MACRO

Macro hiểu đơn giản là các lệnh ngắn gọn được thiết kế sẵn để lấy các thông tin từ

hệ thống hoặc ứng dụng. Giá trị của chúng có thể không cố định vì phụ thuộc vào

vào hệ thống. Trong AutoIt, các macro được bắt đầu với ký tự @ và theo sau tên

của macro. Bên dưới là các Macro thường được dùng .

Macro thời gian

@MSEC Mili giây hiện tại của đồng hồ hệ thống. Vùng giá trị từ 00 đến 999

@SEC Giây hiện tại. Vùng giá trị từ 00 đến 59

@MIN Phút hiện tại. Vùng giá trị từ 00 đến 59

@HOUR Giờ hiện tại, theo dạng 24 giờ. Vùng giá trị từ 00 đến 23

@MDAY Ngày hiện tại trong tháng. Vùng giá trị từ 01 đến 31

@MON Tháng hiện tại. Vùng giá trị từ 01 đến 12

@YEAR Bốn ký số của năm hiện hành

Page 28: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

@WDAY Thứ trong tuần. Vùng giá trị từ 01 đến 7, tương ứng : 1=CN, 2=

Thứ 2,...

@YDAY Ngày hiện tại là ngày thứ bao nhiêu trong năm. Vùng giá trị từ 01

đến 366 (hoặc 365 nếu không phải năm nhuận)

Macro thư mục

Áp dụng cho tất cả người dùng (All User). Các giá trị đọc từ :

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion

@AppDataCommonDir đường dẫn đến thư mục Application Data

@DesktopCommonDir đường dẫn đến thư mục Desktop

@DocumentsCommonDir đường dẫn đến thư mục Documents

@FavoritesCommonDir đường dẫn đến thư mục Favorites

@ProgramsCommonDir đường dẫn đến thư mục Start Menu's Programs

@StartMenuCommonDir đường dẫn đến thư mục Start Menu

@StartupCommonDir đường dẫn đến thư mục Startup

Phần này áp dụng cho người dùng hiện hành. Các giá trị đọc từ :

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion

@AppDataDir đường dẫn đến thư mục Application Data của người dùng.

Page 29: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

@DesktopDir đường dẫn đến thư mục Desktop của người dùng

@MyDocumentsDir đường dẫn đến thư mục My Document

@FavoritesDir đường dẫn đến thư mục Favorites

@ProgramsDir đường dẫn đến thư mục Programs (thư mục trên Start

Menu)

@StartMenuDir đường dẫn đến thư mục Start Menu

@StartupDir đường dẫn đến thư mục Startup

@UserProfileDir đường dẫn đến thư mục Profile

Phần này lấy các thông tin liên quan đến hệ thống máy tính

@HomeDrive Ký tự của ổ đĩa chứa thư mục home của user

@HomePath Một phần đường dẫn đến thư mục home. Sử dụng thêm

@HomeDrive&"\" để có đường dẫn đầy đủ

@HomeShare Thư mục home chứa tên Server và tên chia sẻ.

@LogonDNSDomain DNS Domain đã đăng nhập

@LogonDomain Domain đã đăng nhập.

@LogonServer Server đã đăng nhập

@ProgramFilesDir Đường dẫn đến thư mục Program Files

@CommonFilesDir Đường dẫn đến thư mục Common Files

Page 30: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

@WindowsDir Đường dẫn đến thư mục Windows

@SystemDir Đường dẫn đến thư mục System của Windows (hoặc

System32)

@TempDir Đường dẫn đến thư mục chứa các file tạm

@ComSpec

Giá trị của %comspec%, (SPECified secondary

COMmand interpreter) dùng cho command line, ví dụ

: Run(@ComSpec & " /k help | more")

Macro hệ thống

@CPUArch Trả về "x86" cho CPU 32 bit và "x64" cho CPU 64 bit

@KBLayout Trả về mã hiển thị của bàn phím. Xem trong Appendix để

biết giá trị

@OSArch Trả về một trong các giá trị sau : "X86", "IA64", "X64" - cho

biết kiến trúc của hệ điều hành đang chạy.

@OSLang Trả về mã hiển thị của hệ điều hành. Xem trong Appendix

@OSType Trả về "WIN32_NT" cho Windows

NT/2000/XP/2003/Vista/2008.

@OSVersion Trả về một trong các giá trị sau : "WIN_2008",

"WIN_VISTA", "WIN_2003", "WIN_XP", "WIN_2000".

@OSBuild Trả về số xây dựng của Hệ điều hành. Ví dụ, Windows 2003

Page 31: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Server trả về 3790

@OSServicePack Gói dịch vụ của hệ điều hành dạng như "Service Pack 3"

hoặc, đối với Windows 95, nó có thể trả về "B"

@ComputerName Tên mạng của máy tính.

@UserName ID của người dùng đã đăng nhập hiện hành .

@IPAddress1 Địa chỉ IP của card mạng thứ nhất. Có thể trả về 127.0.0.1

trên vài máy tính

@IPAddress2 Địa chỉ IP của card mạng thứ hai. Returns 0.0.0.0 nếu không

dùng được

@IPAddress3 Địa chỉ IP của card mạng thứ ba. Returns 0.0.0.0 nếu không

dùng được

@IPAddress4 Địa chỉ IP của card mạng thứ tư. Returns 0.0.0.0 nếu không

dùng được

@DesktopHeight Chiều cao của màn hình desktop (pixel)

@DesktopWidth Chiều rộng của màn hình desktop (pixel)

@DesktopDepth Độ sâu của màn hình desktop (tính theo bit)

@DesktopRefresh Tần số làm tươi của màn hình, tính theo hezt (hz)

Macro liên quan đến AutoIt

Page 32: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Phần này chỉ trình bày một số Macro thông dụng. Các macro còn lại các bạn tự

xem.

@compiled Trả về 1 nếu mã đã được biên dịch, ngược lại trả về 0

@error Cờ biểu thị trạng thái lỗi. Xem hàm SetError

@exitCode Mã thoát được thiết lập bởi lệnh Exit

@exitMethod Xem Func OnAutoItExit()

@extended Một giá trị mở rộng được trả về từ một hàm. Xem hàm

StringReplace

@NumParams Tổng số thông số đã sử dụng trong việc gọi hàm của người

dùng..

@ScriptName Tên của file script đang chạy

@ScriptDir Đường dẫn đến thư mục chứa file script đang chạy. (không

chứa dấu "\" ở cuối )

@ScriptFullPath Bằng với @ScriptDir & "\" & @ScriptName

@ScriptLineNumber Số thứ tự của dòng lệnh đang được thi hành. Thích hợp

cho việc debug.

@WorkingDir Thư mục làm việc hiện tại (không chứa dấu "\" ở cuối)

@AutoItExe

Đường dẫn và tên của file AutoIt đang chạy. Nếu là mã đã

biên dịch thì trả về đường dẫn và tên của file exe đang

chạy

Page 33: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

@AutoItPID ID của đoạn chương trình script đang chạy trong bộ nhớ

@AutoItVersion Số phiên bản của AutoIt như 3.0.102.0

@AutoItX64 Trả về 1 nếu đang chạy dưới AutoIT phiên bản x64

@InetGetActive Là 1 nếu một InetGet download đã được kích hoạt, ngược

lại là 0.

@InetGetBytesRead Suốt quá trình InetGet download, macro này cho số byte đã

đọc. Cho -1 nếu có một lỗi download.

@CR Phím xuống dòng, Chr(13); đôi lúc hữu dụng cho các ngắt

dòng

@LF Tín hiệu xuống dòng, Chr(10); đặc trưng cho việc ngắt

dòng

@CRLF = @CR & @LF ; đôi lúc hữu dụng cho các ngắt dòng

@TAB Phím Tab, Chr(9)

CÂU LỆNH ĐIỀU KIỆN IF

Câu lệnh if là một câu lệnh điều kiện phổ biến nhất trong các ngôn ngữ lập trình

bậc cao. Nó được dùng để kiểm tra một điều kiện nào đó, nếu dúng thì thực hiện

công việc tương ứng, ngược lại thì làm một việc khác. Nếu bạn đã học qua Excel

thì chắc chắn phải biết hàm If bên đó. Với AutoIt, câu lệnh điều kiện if được thành

lập thành một khối. Để đơn giản, ta chia thành các phần nhỏ để dễ trình bày.

Dạng chung của If :

Page 34: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

If <điều kiện> Then

<các câu lệnh>

............

Else

<các câu lệnh>

.........

EndIf

Như trình bày ở trên ta thấy rằng, một khối lệnh If phải được bắt đầu với If... Then

và kết thúc với EndIf.

<điều kiện> là một biểu thức so sánh (có sử dụng các toán tử so sánh, logic như :

<, >, <> , =,...And, Or, Not) hoặc một biểu thức thường có trả về giá trị. Nếu điều

kiện trả về True thì <các câu lệnh> sau Then được thực hiện. Nếu ngược lại thì

<các câu lệnh> sau Else được thực hiện, không bao giờ xảy ra hai trường hợp cùng

một lúc. Cũng xin nhắc lại, nếu <điều kiện> trả về một giá khác 0 thì có nghĩa

True, bằng 0 là False.

<các câu lệnh> có thể là một hay nhiều dòng lệnh, hoặc cũng có thể là lệnh rỗng.

Hoặc cũng có thể là một khối điều kiện If khác.

Mệnh đề Else thì tự chọn, có thể có hoặc không. Nếu Else không tồn tại thì khi

<điều kiện> là False thì chương trình sẽ thực hiện tiếp các lệnh nằm sau EndIf.

Ví dụ đơn giản sau xét xem số chỉ định là chẵn hay lẻ.

$n = 101

If Mod($n, 2)=0 Then

MsgBox(0, "Ket qua", $n & " là số chẵn")

Else

MsgBox(0, "Ket qua", $n & " là số lẻ")

EndIf

Page 35: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Hàm Mod có chức năng tìm số dư của phép chia giữa $n và 2. Cú pháp chung là

Mod( a, b). Trong đó a là số bị chia và b là số chia.

Các If lồng nhau :

If được lồng nhau là một If nằm bên trong một khối If...EndIf khác. Các If lồng

nhau được dùng rất phổ biến trong lập trình, thông thường là trong trường hợp

thẩm định một <điều kiện> với nhiều giả thiết xảy ra khác nhau. Trong các If lồng

nhau thì lệnh Else luôn có mối quan hệ liên kết với khối If (chưa có EndIf ) nằm

gần nó nhất.

Ví dụ sau là một bổ sung của ví dụ phía trên, xét xem thêm điều kiện để biết số đó

có phải là số có 3 chữ số hay không.

$n = 1010

If Mod($n, 2)=0 Then

If 100<=$n And $n<=999 Then

MsgBox(0, "Ket qua", $n & " là số chẵn có 3 chữ số")

Else

MsgBox(0, "Ket qua", $n & " là số chẵn không phải 3 chữ số")

EndIf

Else

If 100<=$n And $n<=999 Then

MsgBox(0, "Ket qua", $n & " là số lẻ có 3 chữ số")

Else

MsgBox(0, "Ket qua", $n & " là số lẻ không phải 3 chữ số")

EndIf

EndIf

Bước thang If... ElseIf... Else... EndIf

Với hai phần vừa được trình bày ở trên thì có lẻ bạn đã hiểu được phần nào khối

lệnh If và có thể sử dụng nó để giải quyết nhiều bài toán có yêu cầu điều kiện.

Page 36: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Trong phần các khối If lồng nhau, chỗ lồi lõm là một kỹ thuật đúng. Tuy nhiên, khi

có quá nhiều If được lồng vào nhau thì đoạn mã của bạn sẽ bị lõm vào rất sâu. Vì

lý do này mà bước thang If..ElseIf... được dùng. ElseIf là một từ khóa của AutoIt,

báo hiệu việc thẩm định điều kiện If tiếp theo. Cú pháp :

If <điều kiện 1> Then

<các câu lệnh 1>

.........

ElseIf <điều kiện 2> Then

<các câu lệnh 2>

..........

ElseIf <điều kiện n> Then

<các câu lệnh n>

...........

Else

<các câu lệnh>

........

EndIf

Xin nói luôn với các bạn một điều, cú pháp này mới chính là cú pháp tổng quát

nhất của khối lệnh If. Hai phần : “Dạng chung của If” và “Các if lồng nhau” thực

chất được tách từ đây mà ra. Cho nên từ đây trở đi, khi sử dụng If bạn chỉ cần quan

tâm đến phần này. Đến đây cũng xin giải thích lại để bạn hiểu và ghi nhớ.

Các <điều kiện> được thẩm định từ trên xuống. Nếu <điều kiện 1> là True, thì

<các câu lệnh 1> được thi hành. Ngược lại thì kiểm tra <điều kiện 2> , nếu đúng

thì thi hành <các câu lệnh 2>. Việc ước lượng được xét dần đến <điều kiện n>.

Nếu sau tất cả các lần thẩm định, không một điều kiện nào thỏa mãn và Else có tồn

tại, thì các lệnh sau Else được thi hành. Ví dụ sau minh họa rõ việc dùng khối If

tổng quát .

Page 37: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Dim $var = '-5'

If $var > 0 Then

MsgBox(4096,"", "Value is positive.")

ElseIf $var < 0 Then

MsgBox(4096,"", "Value is negative.")

Else

If StringIsXDigit ($var) Then

MsgBox(4096,"", "Value might be hexadecimal!")

Else

MsgBox(4096,"", "Value is either a string or is zero.")

EndIf

EndIf

Chú ý

Trong trường hợp câu lệnh If bạn sử dụng, chỉ có một lệnh sau Then và

không có phần Else thì có thể viết gọn như sau :

If <điều kiện> Then <câu lệnh>

Ví dụ :

$v='05'

if StringIsDigit($v) Then MsgBox(0,'msg','It is a number')

; các lệnh không thuộc If có thể viết tiếp ở đây

Trong các câu lệnh điều kiện (như If) thì việc dùng dấu ngoặc đơn ( ) là

không thể thiếu nếu như bạn muốn thẩm định các điều kiện một cách chính

xác, vài bài toán yêu cầu được kiểm tra với nhiều điều kiện lồng vào nhau,

một kết quả không mong muốn có thể được đưa ra nếu như bạn không gom

nhóm các điều kiện hoặc gom nhóm không đúng. Bạn xem ví dụ sau cho

thấy cách thức xét điều kiện của khối If thứ nhất và khối If thứ hai là hoàn

toàn khác nhau :

Page 38: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ
Page 39: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Dim $a=0, $b =2, $c=0

if ($a>0 And $b>0) Or $c=0 Then MsgBox(0,"msg", " Thông

điệp 1")

if $a>0 And ($b>0 Or $c=0) Then MsgBox(0,"msg", " Thông

điệp 2")

CÂU LỆNH ĐIỀU KIỆN SELECT

Khối lệnh Select thực chất là một dạng khác của If lồng nhau, được dùng như một

dạng trình bày có hiệu quả hơn trong việc thẩm định nhiều điều kiện liên tiếp.

Dạng tổng quát của Select như sau :

Select

Case <điều kiện 1>

<các câu lệnh>

......

Case <điều kiện 2>

<các câu lệnh>

........

Case Else

<các câu lệnh>

........

EndSelect

Giải thích

<điều kiện> : cũng tương tự như khối lệnh If, cũng sử dụng các toán tử so sánh

và logic.

<các câu lệnh> : có thể là bất cứ lệnh gì, kể cả các khối Select , Switch hay If

khác đều được.

Case Else : có thể có hoặc không.

Page 40: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Hình thức xét điều kiện cũng bắt đầu từ trên xuống. Kiểm tra <điều kiện 1> nếu

thỏa thì thực hiện <các câu lệnh> sau nó. Ngược lại, thì xét <điều kiện 2>,

<điều kiện 3>, cho đến <điều kiện thứ n>. Nếu không có <điều kiện> nào thỏa

thì <các câu lệnh> sau Case Else sẽ được thực thi, nếu như Case Else được thiết

lập. Trong trường hợp có nhiều <điều kiện> đúng, thì chỉ <điều kiện> đúng đầu

tiên được tìm thấy mới được thi hành.

Ví dụ 1 :

$s = 3

$n = 5

Select

case IsString($s)

MsgBox(0,"msg", "$s là chuỗi")

Case $n<>0

MsgBox(0,"msg", "$n là số khác 0")

Case Else

MsgBox(0,"msg", "$s không là chuỗi. $n không là số")

EndSelect

Hàm IsString xét xem một giá trị nào đó có phải là chuỗi hay không. Nếu đúng trả

về 1, ngược lại trả về 0.

Ví dụ 2 :

; đoạn mã này cho biết hệ điều hành đang sử dụng

$ver = @OSVersion

Select

Case $ver = "WIN_2008"

MsgBox(0,"Version", "Your OS is Win 2008")

case $ver = "WIN_VISTA"

MsgBox(0,"Version", "Your OS is Win Vista")

Page 41: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Case $ver = "WIN_2003"

MsgBox(0,"Version", "Your OS is Win 2003")

Case $ver = "WIN_XP"

MsgBox(0,"Version", "Your OS is Win XP")

Case $ver ="WIN_2000"

MsgBox(0,"Version", "Your OS is Win 2000")

case Else

MsgBox(0,"Version", "Your OS is Win 9x")

EndSelect

CÂU LỆNH SWITCH

Không giống như khối lệnh If hay Select thực hiện thẩm định nhiều điều kiện của

bài toán. Trong khối lệnh Switch, ứng với một biến cho phép bạn lựa chọn nhiều

giá trị hoặc là miền giá trị để làm điều kiện xử lý. Vì vậy mà Switch còn được gọi

là lệnh lựa chọn đa nhánh. Thực chất việc xét từng giá trị cho một biến vẫn có thể

làm được với hai khối lệnh If hay Select , nhưng ở Switch cách thức làm việc đã

được đơn giản để có thể thực hiện nhanh chóng và dễ hiểu hơn.

Cú pháp tổng quát :

Switch <biến hoặc biểu thức>

Case <value1> To <Value2> , < value3> To <value4> , ....., <value

n-1> To <value n>

<các câu lệnh>

.......

Case <value1> To <Value2> , < value3> To <value4> , ....., <value

n-1> To <value n>

<các câu lệnh>

........

Case Else

Page 42: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

<các câu lệnh>

.......

EndSwitch

Giải thích

Giá trị của <biến hoặc biểu thức> sẽ được lấy và kiểm tra lần lượt theo thứ tự

các Case. Khi một giá trị trong Case phù hợp giá trị của <biến hoặc biểu thức>

thì các dãy lệnh liên hợp với Case đó được thi hành. Các Case lần lượt được

duyệt cho đến khi gặp một Case thỏa điều kiện hoặc từ khóa EndSwitch cùng

cấp. Nếu Case Else được chỉ định, thì khi tất cả các Case đều không thỏa, khối

lệnh liên kết với Case Else sẽ được thực thi.

Chú ý

<value1> To <value2> hoặc <value n-1> To <value n> là một miền giá

trị. Nếu bạn không muốn chỉ định các miền giá trị cho Case thì có thể chỉ

định những giá trị cụ thể, mỗi giá trị cách nhau bởi dấu phẩy. Từ khóa To và

các phần sau nó thì tùy, có thể có hoặc không.

<các câu lệnh> có thể là bất cứ một lệnh gì, thậm chí là nhiều khối

Switch lồng nhau.

Ví dụ :

Đoạn mã sau sẽ lấy giờ của hệ thống và suy ra thời điểm hiện tại trong ngày

Switch @HOUR

Case 6 To 11

$msg = "Good Morning"

Case 12 To 17

$msg = "Good Afternoon"

Case 18 To 21

$msg = "Good Evening"

Case Else

Page 43: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

$msg = "What are you doing now ?"

EndSwitch

MsgBox(0, Default, $msg)

CONTINUECASE

Theo như mặc định, thì trong khối lệnh Switch và Select sẽ dừng việc kiểm tra

điều kiện và kết thúc nếu gặp được một Case trả về giá trị True. Tuy nhiên trong

một vài tình huống, bạn lại không muốn kết thúc khối lệnh Select hay Switch khi

gặp một trường hợp đúng, bạn muốn nó vẫn thực hiện kiểm tra các Case phía sau

để làm một công việc nào đấy. Thông thường, đối với một Case thỏa điều kiện và

đang thi hành các lệnh liên kết với nó, thì việc thi hành chỉ dừng lại khi gặp một

lệnh Case tiếp theo hoặc lệnh EndSwitch hay EndSelect.

Thì ở đây, AutoIt hỗ trợ cho bạn từ khóa ContinueCase để dừng việc thực hiện một

Case hiện tại và duyệt đến các lệnh nằm trong Case tiếp theo.

Cú pháp : ContinueCase

Ví dụ sau sử dụng hàm InputBox và cờ lỗi @error của nó để minh họa việc dùng

ContinueCase.

$msg = ""

$w = InputBox(Default, "Please enter a word.", "", " M", Default,

Default, Default, Default, 5)

Switch @error

Case 2

$msg = "Timeout "

ContinueCase

Case 1 ; Continuing previous case

$msg &= "Cancellation"

Case 0

Switch $w

Page 44: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ
Page 45: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Case "a", "e", "i", "o", "u"

$msg = "Vowel"

Case "QP"

$msg = "Mathematics"

Case "Q" to "QZ"

$msg = "Science"

Case Else

$msg = "Others"

EndSwitch

Case Else

$msg = "Something went horribly wrong."

EndSwitch

MsgBox(0, Default, $msg)

Hàm InputBox sẽ hiện ra trong vòng 5 giây để chờ bạn gõ một ký tự. Sau 5 giây,

nếu bạn không thao tác gì, hộp thoại sẽ tự đóng và hiện thông báo “Timeout

Cancellation”. Nếu bạn nhấn nút Cancel thì hiện thông báo “Cancellation”. Nếu

bạn gõ một từ hay ký tự và nhấn OK thì các khối lệnh bắt đầu từ Case 0 sẽ thực thi

để hiện thông báo tương ứng với từ bạn vừa gõ. Cờ lỗi @error cho biết trạng thái

tác động của người dùng đối với hàm InputBox. Bạn xem cú pháp của hàm

InputBox trong file Help hoặc trong mục Hàm của ebook này để hiểu rõ thêm.

VÒNG LẶP FOR

Trong AutoIt và tất cả các ngôn ngữ lập trình hiện đại khác, các lệnh lặp (cũng còn

được gọi là vòng lặp) cho phép thực hiện lặp đi lặp lại cho đến khi một điều kiện

nào đó xảy ra. Tùy theo ngôn ngữ và tùy loại vòng lặp mà cách diễn đạt điều kiện

sẽ khác nhau. Thông thường vòng lặp For là vòng lặp cơ bản, cho phép thực hiện

lặp lại với số lần định trước.

AutoIt hỗ trợ vòng lặp For với dạng tổng quát sau :

Page 46: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

For <var> = <start_value> To <stop_value> Step <step_value>

<các câu lệnh>

.........

Next

Giải thích

<var> : biến dùng để thực hiện việc đếm

<start_value> : giá trị bắt đầu cho biến đếm

<stop_value > : giá trị cuối cùng cho biến đếm

<step_value> : giá trị cộng vào cho biến đếm sau mỗi lần lặp. Mặc định là 1.

<các câu lệnh> : công việc cần xử lý. Vẫn có thể là For hay những vòng lặp

khác đều được.

Vòng lặp For được bắt đầu bởi từ khóa For và kết thúc bởi từ khóa Next. Đầu tiên,

<start_value> sẽ được gán vào biến đếm <var> , sau đó so sánh với <stop_value>.

Nếu <var> nhỏ hơn hoặc bằng <stop_value> thì thực hiện <các câu lệnh> , sau đó

biến đếm <var> sẽ được tăng lên <step_value> đơn vị. Tiếp tục so sánh với

<stop_value> , thực hiện <các câu lệnh> rồi sau đó tăng biến đếm lên

<step_value> . Quá trình lặp lại cho đến khi biến đếm <var> lớn hơn

<stop_value>, vòng lặp kết thúc.

Miêu tả cụ thể đối với vòng lặp For như trình bày ở trên xem ra có vẻ dài dòng.

Bạn chỉ cần hiểu đơn giản là, vòng lặp For sẽ cho biến đếm <var> chạy từ

<start_value> đến <stop_value>, mỗi lần lặp thì cộng <step_value> vào <var>.

Chú ý

Phần Step <step_value> có thể có hoặc không. Nếu không có, thì giá trị

mặc định cho <step_value> sẽ bằng 1. Trường hợp <step_value> là một số

âm và <start_value> lớn hơn <stop_value> thì ta có một vòng lặp đếm

ngược.

Page 47: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Nếu như <stop_value> và <step_value> là các biến, thì giá trị của các

biến này chỉ được đọc một lần ở lần lặp đầu tiên. Ở các lần lặp sau, cho dù

bạn thay đổi giá trị cho <stop_value> hay <step_value> thì chu kỳ lặp vẫn

không thay đổi.

Bên trong vòng lặp, nếu bạn sử dụng một biến không có khai báo, thì

mặc định nó sẽ được tạo với phạm vi cục bộ (Local).

Vòng lặp For sẽ không thực hiện bất kỳ lần lặp nào nếu như :

start_value >stop_value và step_value >= 0

Hoặc start_value < stop_value và step_value là một số âm.

Ví dụ

Đoạn mã sau được dùng để in các con số từ 1 đến 100 lên màn hình console

của sciTe.

For $i=1 to 100

ConsoleWrite($i & " ")

Next

MsgBox(0, "Thong bao", " Vòng lặp kết thúc ")

Đoạn mã sau thực hiện việc đếm ngược và chỉ in các con số chẵn từ 100 về

0

For $i=100 to 0 step -2

ConsoleWrite($i & " ")

Next

MsgBox(0, "Thong bao", " Vòng lặp kết thúc ")

VÒNG LẶP WHILE ... WEND

Nếu như vòng lặp For thực hiện việc lặp với một biến chạy thì vòng lặp While thực

hiện việc lặp bằng việc kiểm tra điều kiện.

Cú pháp chung :

While <điều kiện>

Page 48: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

<các câu lệnh>

......

WEnd

Giải thích

<điều kiện> có thể là một một biểu thức điều kiện và True là giá trị khác 0

<các câu lệnh > có thể là rỗng, lệnh đơn, khối lệnh hoặc là các vòng lặp khác.

Trước khi các lệnh bên trong vòng lặp được thực thi, thì <điều kiện> được kiểm

tra. Nếu trả về giá trị True, thì <các câu lệnh> được duyệt và thi hành cho đến khi

gặp WEnd. Khi đó vòng lặp quay lại thẩm định <điều kiện>. Quá trình lặp kết

thúc khi <điều kiện> trả về False (tức không còn đúng nữa).

Chú ý

Số lần thực hiện của vòng lặp sẽ là 0, nếu như ngay bước kiểm tra <điều

kiện> lần đầu tiên, <điều kiện> cho một giá trị False.

Muốn tạo nên một vòng lặp vô tận, bạn chỉ cần thay thế <điều kiện> bằng

một giá trị khác 0.

Ví dụ

Đoạn mã này sẽ hiện 5 lần thông báo cho biết giá trị của biến $i

$i = 0

While $i <= 10

MsgBox(0, "Value of $i is:", $i)

$i = $i + 1

WEnd

MsgBox(0, "Thong bao", "While loop stoped. Script is exiting")

VÒNG LẶP DO... UNTIL

Tương tự như While... WEnd, khối lệnh Do ... Until cũng thực hiện việc lặp dựa

trên việc kiểm tra biểu thức điều kiện.

Cú pháp :

Page 49: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Do

<các câu lệnh>

........

Until <điều kiện>

Giải thích

Vòng lặp Do.. Until thực hiện việc lặp lại các lệnh bên trong nó khi <điều kiện> trả

về giá trị False. Có nghĩa là vòng lặp sẽ kết thúc nếu như <điều kiện> là đúng

(True).

Chú ý

Không giống như For và While, cả hai vòng lặp này đều thực hiện việc kiểm tra

điều kiện ở phần đầu của vòng lặp. Vòng lặp Do.. Until thực hiện việc kiểm tra

điều kiện sau khi <các câu lệnh> được thi hành. Điều này có nghĩa là Do...Until

luôn thực hiện việc lặp ít nhất một lần.

Ví dụ

Đoạn chương trình sau tính giá trị trung bình một dãy số (không biết trước có bao

nhiêu số) do người dùng nhập vào. Quá trình nhập số kết thúc khi người dùng nhập

vào số 0. Biến $sum sẽ cộng dồn các giá trị được nhập vào, $count sẽ đếm xem đã

qua bao nhiêu lần nhập số (tương ứng với số lần lặp lại).

Global $n, $count=0, $sum=0

Do

$n = InputBox("Get Data", "Please enter a number." &@crlf & "If

number is zero, stop entering data")

$sum += $n

$count += 1

Until $n=0

$count -= 1 ; bỏ qua lần nhập số 0

MsgBox(0,"Result", "Average of sum : " & $sum/$count)

Page 50: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ
Page 51: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

FOR ... IN... NEXT

Chức năng của câu lệnh này là liệt kê các phần tử bên trong một mảng hoặc một

tập hợp object (đối tượng) COM (component object model)

Cú pháp

For <var> In <expression>

<các câu lệnh>

........

Next

Giải thích

<var> : biến sẽ được gán giá trị của từng phần tử trong <expression>

<expression> : một đối tượng COM hoặc một mảng có ít nhất một phần tử.

Chú ý

Nếu <expression> là một tập hợp object không có phần tử, thì đoạn script

sẽ bỏ qua việc lặp và <var> sẽ chứa một chuỗi rỗng.

Nếu <expression> không phải là object, cũng không phải là mảng, thì

đoạn script sẽ dừng với một lỗi được thông báo, trừ khi bạn có sử dụng trình

điều khiển COM Error.

Giả sử trường hợp <expression> bạn dùng là một mảng và bạn có thay

đổi giá trị của các phần tử trong mảng khi For...In đang chạy, thì giá trị đó sẽ

không được ánh xạ ngay vào trong mảng. Chỉ khi For... In kết thúc thì thay

đổi đó mới có hiệu lực.

Vòng lặp For...In cho phép lồng vào nhau.

Ví dụ 1

Global $array[4]

$array[0]="w"

$array[1]="x"

$array[2]="y"

Page 52: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

$array[3]="z"

For $element In $array

MsgBox(0,"Current $array item",$element)

Next

Ví dụ 2

Đoạn mã sau sẽ thông báo cho bạn biết các cửa sổ Explorer nào đang mở

$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

WITH... ENDWITH

Trên thực tế câu lệnh With..EndWith không hề có chức năng của một vòng lặp,

nhưng do file Help của AutoIt xếp nó vào phạm trù của một vòng lặp nên ở đây ta

vẫn xem xét nó. Chức năng chính của câu lệnh này là đơn giản hóa việc tham chiếu

đến các biến kiểu Object có tên dài.

Cú pháp :

With <biểu thức>

<các câu lệnh>

.......

Page 53: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

EndWith

Giải thích

<biểu thức> : là một biểu thức có kiểu Object

<các câu lệnh> : thao tác trên các biến được tham chiếu đến

Chú ý

Khối lệnh With không cho phép lồng vào nhau.

Ví dụ

Đoạn mã sau sẽ gọi trình duyệt web Internet Explorer với kích thước cửa sổ là

1024 và 768. Đồng thời truy cập vào trang Google.com

; đoạn mã này sử dụng object theo kiểu thông thường

$object = ObjCreate("InternetExplorer.Application.1")

$object.Visible = 1

$object.Height = 768

$object.Width = 1024

$object.Navigate("http://www.google.com/")

; đoạn mã này sử dụng object với With.. EndWith để đơn giản mã

lệnh

$object = ObjCreate("InternetExplorer.Application.1")

With $object

.Visible = 1

.Height = 768

.Width = 1024

.Navigate("http://www.google.com/")

EndWith

VÒNG LẶP VÔ TẬN

Trong lập trình, sẽ có không ít tình huống bạn cần xử lý một bài toán, mà giải thuật

bạn cần dùng là một vòng lặp không biết trước số lần lặp. Vì vậy, cách giải quyết

Page 54: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

là dùng một vòng lặp vô tận. Thông thường trên windows, cách sử dụng phổ biến

nhất của vòng lặp vô tận là dùng để xử lý giao diện người dùng GUI và các tương

tác trên GUI, phần này được đề cập rõ trong phần tạo giao diện bằng AutoIt (Tham

chiếu GUI) của ebook này.

Để tạo một vòng lặp vô tận cho For, While hay Do thì nguyên tắc chung là làm cho

<điều kiện> của vòng lặp đó luôn luôn thỏa. Cụ thể là :

For $i = 0 To 0 Step

0

<lệnh>

.....

Next

While 1

<lệnh>

.....

WEnd

Do

<lệnh>

....

Until 0

Chú ý

Khi bạn muốn sử dụng một vòng lặp vô tận thì nên dùng While... WEnd

hoặc Do.. Until vì chúng ngắn gọn hơn For.

Vòng lặp While chỉ thực hiện lặp khi <điều kiện> trả về True (một giá trị

khác 0), cho nên ở đây ta sử dụng một giá trị đại diện là 1

Vòng lặp Do thực hiện lặp khi <điều kiện> trả về là False (giá trị 0 -

zero), cho nên phần <điều kiện> ta sẽ thay bằng số 0 để nó không bao giờ là

True.

Trong quá trình cho chạy vòng lặp vô tận và xử lý các lệnh một cách liên

tục như vậy sẽ làm cho hiệu suất của CPU bị chiếm dụng rất cao, khoảng vài

chục % (xem ở thẻ Performance trong Task Manager). Vì vậy, khi sử dụng

vòng lặp vô tận bạn phải cẩn thận, và ở vài trường hợp ta cần tạo ra khoảng

Page 55: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

dừng giữa hai lần lặp liên tiếp để tránh quá tải cho CPU. Muốn tạo khoảng

dừng, ta sử dụng câu lệnh Sleep <mili giây> , trong đó 1000 mili giây = 1

giây. Tuy nhiên sẽ làm cho quá trình lặp bị chậm lại, thời gian xử lý sẽ dài

hơn.

Đọc đến đây có lẽ bạn sẽ thắc mắc một điều, làm sao dừng lại vòng lặp vô tận ?

Câu trả lời nằm ngay sau đây.

EXITLOOP

ExitLoop cho phép bạn kết thúc (ngắt) vòng lặp ngay lập tức mà không cần quan

tâm đến điều kiện của vòng lặp. Dạng đầy đủ :

ExitLoop [which loop]

Giải thích

Tham số [which loop] là tùy chọn, có thể có hoặc không. Nếu không được chỉ định

thì mặc định là 1. Chức năng của tham số này cho phép chỉ định vòng lặp nào cần

phải ngắt trong trường hợp có nhiều vòng lặp lồng nhau. Nếu có nhiều vòng lặp

lồng nhau, thì vòng lặp chứa lệnh ExitLoop là vòng lặp cấp 1 (vòng lặp hiện hành),

vòng lặp bao bên ngoài vòng lặp cấp 1 là vòng lặp cấp 2, bao bên ngoài vòng lặp

cấp 2 là vòng lặp cấp 3,... Vì vậy nếu [which loop]

= 1 tương ứng với vòng lặp cấp 1 (vòng lặp hiện hành)

= 2 tương ứng với vòng lặp cấp 2

= n tương ứng với vòng lặp cấp n

= 0 hoặc một số âm thì ExitLoop không có tác dụng ngắt.

Chú ý

Sử dụng ExitLoop bên ngoài vòng lặp là không được phép. Cũng tương tự như

vậy, nếu bạn chỉ định cho tham số [which loop] một cấp vòng lặp không có (hiểu

đơn giản là… giả sử như bạn chỉ có vòng lặp cấp 1, nhưng lại dùng ExitLoop 2

hoặc ExitLoop 3 thì tất nhiên sẽ bị báo lỗi)

Ví dụ

Page 56: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ
Page 57: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Đoạn mã sau minh họa việc dùng ExitLoop cho vòng lặp hiện hành. Vòng lặp vô

tận sẽ cho xuất hiện hộp thoại Running sum =... , yêu cầu bạn nhập vào một số

dương để tính tổng, quá trình lặp lại cho đến khi nào bạn nhập một số âm. Kết quả

được thông báo ra màn hình .

$sum = 0

While 1 ;use infinite loop since ExitLoop will get called

$ans = InputBox("Running sum =" & $sum, _

" Enter a positive number. (A negative number exits)")

If $ans < 0 Then ExitLoop

$sum = $sum + $ans

WEnd

MsgBox(0,"The sum was", $sum)

Ví dụ bên dưới minh họa việc dùng ExitLoop để ngắt vòng lặp cấp 2 (cụ thể là

While). Sau khi chạy sẽ có hai lần xuất hiện thông báo trên màn hình. Bạn chú ý

các giá trị $i và $j được thông báo để hiểu cách làm việc.

$i = 1

While $i<=2 ;đây là vòng lặp cấp 2

For $j=1 To 5 ;đây là vòng lặp cấp 1

If $j=3 Then ExitLoop

MsgBox(0,"msg", "$i = " & $i &" $j = " & $j)

Next

$i += 1

WEnd

CONTINUELOOP

Không như ExitLoop, lệnh ContinueLoop thực hiện ngay lần lặp kế tiếp của vòng

lặp, bỏ qua tất cả các lệnh đứng sau nó. Có dạng đầy đủ

Page 58: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

ContinueLoop [which loop]

Giải thích

Tham số [which loop] của ContinueLoop hoàn toàn như ExitLoop. Cũng có thể có

hoặc không (mặc định là 1 - tức vòng lặp hiện hành). [which loop] bằng n, thì áp

dụng cho vòng lặp cấp n. [which loop] bằng 0 hoặc số âm thì ContinueLoop cũng

mất tác dụng.

Đối với vòng lăp For, ContinueLoop gây ra việc tăng giá trị của biến đếm, thực

hiện so sánh với giá trị dừng và chạy các lệnh như bình thường.

Đối với vòng lặp While và Do, ContinueLoop cũng bỏ qua các lệnh phía sau nó và

quay trở ra xét điều kiện của vòng lặp.

Chú ý

Cũng như ExitLoop, nếu bạn sử dụng ContinueLoop bên ngoài vòng lặp hoặc chỉ

định cho tham số [which loop] một vòng lặp không có thì sẽ bị báo lỗi.

Ví dụ

Đoạn mã sau minh họa việc dùng ContinueLoop cho vòng lặp cấp 1. Bảng thông

báo giá trị $i=2 sẽ không xuất hiện.

For $i=1 To 4

If $i=2 Then ContinueLoop

MsgBox(0, "message", "$i = " & $i)

Next

VÒNG LẶP VÔ TẬN

Trong lập trình, sẽ có không ít tình huống bạn cần xử lý một bài toán, mà giải thuật

bạn cần dùng là một vòng lặp không biết trước số lần lặp. Vì vậy, cách giải quyết

là dùng một vòng lặp vô tận. Thông thường trên windows, cách sử dụng phổ biến

nhất của vòng lặp vô tận là dùng để xử lý giao diện người dùng GUI và các tương

tác trên GUI, phần này được đề cập rõ trong phần tạo giao diện bằng AutoIt (Tham

chiếu GUI) của ebook này.

Page 59: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Để tạo một vòng lặp vô tận cho For, While hay Do thì nguyên tắc chung là làm cho

<điều kiện> của vòng lặp đó luôn luôn thỏa. Cụ thể là :

For $i = 0 To 0 Step

0

<lệnh>

.....

Next

While 1

<lệnh>

.....

WEnd

Do

<lệnh>

....

Until 0

Chú ý

Khi bạn muốn sử dụng một vòng lặp vô tận thì nên dùng While... WEnd

hoặc Do.. Until vì chúng ngắn gọn hơn For.

Vòng lặp While chỉ thực hiện lặp khi <điều kiện> trả về True (một giá trị

khác 0), cho nên ở đây ta sử dụng một giá trị đại diện là 1

Vòng lặp Do thực hiện lặp khi <điều kiện> trả về là False (giá trị 0 -

zero), cho nên phần <điều kiện> ta sẽ thay bằng số 0 để nó không bao giờ là

True.

Trong quá trình cho chạy vòng lặp vô tận và xử lý các lệnh một cách liên

tục như vậy sẽ làm cho hiệu suất của CPU bị chiếm dụng rất cao, khoảng vài

chục % (xem ở thẻ Performance trong Task Manager). Vì vậy, khi sử dụng

vòng lặp vô tận bạn phải cẩn thận, và ở vài trường hợp ta cần tạo ra khoảng

dừng giữa hai lần lặp liên tiếp để tránh quá tải cho CPU. Muốn tạo khoảng

dừng, ta sử dụng câu lệnh Sleep <mili giây> , trong đó 1000 mili giây = 1

giây. Tuy nhiên sẽ làm cho quá trình lặp bị chậm lại, thời gian xử lý sẽ dài

hơn.

Page 60: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Đọc đến đây có lẽ bạn sẽ thắc mắc một điều, làm sao dừng lại vòng lặp vô tận ?

Câu trả lời nằm ngay sau đây.

EXITLOOP

ExitLoop cho phép bạn kết thúc (ngắt) vòng lặp ngay lập tức mà không cần quan

tâm đến điều kiện của vòng lặp. Dạng đầy đủ :

ExitLoop [which loop]

Giải thích

Tham số [which loop] là tùy chọn, có thể có hoặc không. Nếu không được chỉ định

thì mặc định là 1. Chức năng của tham số này cho phép chỉ định vòng lặp nào cần

phải ngắt trong trường hợp có nhiều vòng lặp lồng nhau. Nếu có nhiều vòng lặp

lồng nhau, thì vòng lặp chứa lệnh ExitLoop là vòng lặp cấp 1 (vòng lặp hiện hành),

vòng lặp bao bên ngoài vòng lặp cấp 1 là vòng lặp cấp 2, bao bên ngoài vòng lặp

cấp 2 là vòng lặp cấp 3,... Vì vậy nếu [which loop]

= 1 tương ứng với vòng lặp cấp 1 (vòng lặp hiện hành)

= 2 tương ứng với vòng lặp cấp 2

= n tương ứng với vòng lặp cấp n

= 0 hoặc một số âm thì ExitLoop không có tác dụng ngắt.

Chú ý

Sử dụng ExitLoop bên ngoài vòng lặp là không được phép. Cũng tương tự như

vậy, nếu bạn chỉ định cho tham số [which loop] một cấp vòng lặp không có (hiểu

đơn giản là… giả sử như bạn chỉ có vòng lặp cấp 1, nhưng lại dùng ExitLoop 2

hoặc ExitLoop 3 thì tất nhiên sẽ bị báo lỗi)

Ví dụ

Đoạn mã sau minh họa việc dùng ExitLoop cho vòng lặp hiện hành. Vòng lặp vô

tận sẽ cho xuất hiện hộp thoại Running sum =... , yêu cầu bạn nhập vào một số

dương để tính tổng, quá trình lặp lại cho đến khi nào bạn nhập một số âm. Kết quả

được thông báo ra màn hình .

Page 61: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

$sum = 0

While 1 ;use infinite loop since ExitLoop will get called

$ans = InputBox("Running sum =" & $sum, _

" Enter a positive number. (A negative number exits)")

If $ans < 0 Then ExitLoop

$sum = $sum + $ans

WEnd

MsgBox(0,"The sum was", $sum)

Ví dụ bên dưới minh họa việc dùng ExitLoop để ngắt vòng lặp cấp 2 (cụ thể là

While). Sau khi chạy sẽ có hai lần xuất hiện thông báo trên màn hình. Bạn chú ý

các giá trị $i và $j được thông báo để hiểu cách làm việc.

$i = 1

While $i<=2 ;đây là vòng lặp cấp 2

For $j=1 To 5 ;đây là vòng lặp cấp 1

If $j=3 Then ExitLoop

MsgBox(0,"msg", "$i = " & $i &" $j = " & $j)

Next

$i += 1

WEnd

CONTINUELOOP

Không như ExitLoop, lệnh ContinueLoop thực hiện ngay lần lặp kế tiếp của vòng

lặp, bỏ qua tất cả các lệnh đứng sau nó. Có dạng đầy đủ

ContinueLoop [which loop]

Giải thích

Tham số [which loop] của ContinueLoop hoàn toàn như ExitLoop. Cũng có thể có hoặc không (mặc định là 1 - tức vòng lặp hiện hành). [which loop] bằng n, thì áp

Page 62: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

dụng cho vòng lặp cấp n. [which loop] bằng 0 hoặc số âm thì ContinueLoop cũng

mất tác dụng.

Đối với vòng lăp For, ContinueLoop gây ra việc tăng giá trị của biến đếm, thực

hiện so sánh với giá trị dừng và chạy các lệnh như bình thường.

Đối với vòng lặp While và Do, ContinueLoop cũng bỏ qua các lệnh phía sau nó và

quay trở ra xét điều kiện của vòng lặp.

Chú ý

Cũng như ExitLoop, nếu bạn sử dụng ContinueLoop bên ngoài vòng lặp hoặc chỉ

định cho tham số [which loop] một vòng lặp không có thì sẽ bị báo lỗi.

Ví dụ

Đoạn mã sau minh họa việc dùng ContinueLoop cho vòng lặp cấp 1. Bảng thông

báo giá trị $i=2 sẽ không xuất hiện.

For $i=1 To 4

If $i=2 Then ContinueLoop

MsgBox(0, "message", "$i = " & $i)

Next

Hàm là gì ?

Nói đơn giản, hàm là một chương trình con thực hiện một chức năng cụ thể nào đó

trong chương trình chính.

Tại sao lại gọi là chương trình con ? Bởi vì trong quá trình viết một ứng dụng, tất

nhiên sẽ có một vài đoạn chương trình được dùng đi dùng lại nhiều lần. Ví dụ như

bạn cần hiển thị một hộp thoại chứa thông báo ra màn hình chẳng hạn. Bạn viết nó

ở đầu chương trình để hiện thông báo bắt đầu chạy chương trình, đến cuối chương

trình thì viết lại để hiện thông báo kết thúc chương trình. Bạn thử hình dung nếu có

rất nhiều nơi trong chương trình chính của bạn muốn hiển thị thông báo ra màn

hình thì cảm giác của bạn sẽ như thế nào !? Thật chán ngấy và phí thời gian khi

phải ngồi gõ lại từng dòng lệnh cho một công việc là hiển thị thông báo ra màn

Page 63: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

hình, trong khi ta đã viết nó ở rất nhiều nơi trong chương trình rồi. Điều này làm

cho công việc của bạn không hiệu quả, chương trình thì dài thêm và càng rối mắt.

Để giải quyết vấn đề này, các nhà tin học đã đưa ra một giải pháp. Đó là, chỉ viết

đoạn mã xử lý công việc ở một nơi nào đó trong chương trình chính. Sau đó, đặt

cho nó một cái tên, đưa cho nó các biến đại diện để tiếp nhận các dữ kiện cần xử lý

và chỉ cho nó cách thức để trả về kết quả. Do đoạn mã này nằm bên trong chương

trình chính, cho nên ta gọi nó là chương trình con (theo đúng nghĩa đen) hay còn

gọi là hàm.

Và cuối cùng, khi muốn sử dụng một hàm bạn chỉ cần quan tâm đến cách thức để

truyền dữ kiện cần xử lý cho nó và cách nó trả về một kết quả. Bạn không cần phải

bận tâm là bên trong nó làm việc như thế nào, các dòng lệnh được viết ra sao. Bạn

chỉ muốn có kết quả cuối cùng, hàm sẽ làm việc đó cho bạn.

Đối với AutoIt, thì để hiển thị một hộp thoại thông báo ra màn hình, AutoIt hỗ trợ

cho bạn hàm MsgBox mà bạn đã từng thấy ở các ví dụ. Cũng xin nhắc lại với bạn

một điều, sức mạnh của AutoIt nằm ở việc sử dụng các hàm được định nghĩa sẵn,

cho nên nếu bạn muốn tạo một ứng dụng hiệu quả thì việc định nghĩa và gọi hàm là

không thể thiếu.

Thông thường trong các ngôn ngữ khác (như Pascal) thì một hàm có trả về giá trị

cụ thể thì vẫn gọi là hàm. Nhưng nếu hàm đó không trả về một giá trị nào cả, các

lệnh bên trong chỉ xử lý những tác vụ mang tính “thủ tục” nên còn được gọi là thủ

tục. Tuy nhiên, AutoIt không có khái niệm thủ tục, nên dù hàm có hay không trả ra

giá trị thì ta vẫn gọi chung là hàm.

Phạm vi của một hàm

Trong AutoIt, mỗi hàm là một khối mã riêng biệt. Mã của một hàm chỉ thuộc riêng

hàm đó và các câu lệnh trong bất cứ một hàm nào khác đều không thể truy cập đến

nó được. Nói theo cách khác, các mã và dữ liệu được định nghĩa bên trong một

Page 64: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

hàm thì không thể tác động, ảnh hưởng đến các mã hay dữ liệu được định nghĩa

bên trong một hàm khác, vì hai hàm có hai phạm vi khác nhau.

Các biến được định nghĩa bên trong một hàm thì được gọi là biến cục bộ (Local).

Chúng được tạo ra khi hàm được nạp vào , và sẽ mất khi thoát hàm. Như vậy, một

biến cục bộ không thể lưu trữ giá trị của nó giữa hai lần gọi hàm. Trong trường hợp

bạn sử dụng một biến toàn cục (Global) bên trong hàm thì nội dung của biến toàn

cục sẽ thay đổi, và giá trị của nó vẫn giữ nguyên sau khi hàm kết thúc.

Tất cả các hàm trong AutoIt đều có cùng tầm vực, cho nên bạn không thể định

nghĩa một hàm bên trong một hàm khác.

ĐỊNH NGHĨA HÀM

Để định nghĩa một hàm, bạn phải tuân thủ các qui tắc mà ngôn ngữ lập trình đó hỗ

trợ. Với AutoIt, dạng tổng quát để khai báo và định nghĩa một hàm như sau :

Func <tên_hàm>( <các tham biến> )

<các lệnh nội bộ>

. . . . .

Return <giá trị>

EndFunc

Giải thích

Func. . . EndFunc : là hai từ khóa bắt buộc, có nhiệm vụ chỉ ra điểm bắt đầu

và kết thúc của một hàm

<tên_hàm> : tên đại diện miêu tả ngắn gọn chức năng của hàm

<các tham biến> : khai báo một danh sách tên các biến, mỗi biến được ngăn

cách với nhau bằng dấu phẩy. Danh sách này sẽ nhận các dữ kiện được truyền vào

để hàm xử lý. Một hàm có thể không có <các tham biến>, tức danh sách tham biến

sẽ rỗng. Tuy thế, ngay cả khi không có tham biến nào thì bạn vẫn phải đặt dấu

ngoặc đơn vào.

Page 65: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

<các lệnh nội bộ> : ở đây bạn chính là thân của hàm. Bạn có thể thực hiện

việc khai báo các biến cục bộ (Local), viết các biểu thức , . . . .

Return <giá trị> : tùy chọn, có thể có hoặc không. Nếu như bạn tạo một hàm

có trả về một giá trị thì phần này được thêm vào, ngược lại thì không cần. Ví dụ

như bạn định nghĩa hàm Sin(x) để tính sin của x, thì khi thực hiện các tính toán

xong. Bạn dùng lệnh Return <giá trị> để trả về kết quả vừa tính được cho Sin(x).

Chú ý

Khi khai báo <các tham biến>, bạn không cần đặt vào từ khóa chỉ phạm

vi của biến. Theo mặc định, chúng luôn là cục bộ (local). Thậm chí nếu bạn

có chỉ định Dim, Local hay Global thì cũng sẽ bị báo lỗi. Tuy nhiên, hai từ

khóa Const, ByRef lại được phép đặt vào phía trước mỗi biến trong danh

sách các tham biến để mở rộng chức năng của hàm (xem phần “Truyền dữ

kiện cho hàm”).

Lệnh Return có chức năng chính là chấm dứt ngay quá trình xử lý bên

trong hàm và trả về <giá trị> cho hàm (nếu có). Theo mặc định, AutoIt luôn

trả về giá trị cho một hàm. Nếu lệnh Return <giá trị> được dùng thì hàm sẽ

trả về <giá trị>. Hàm trả về 0 (hoặc “ “ nếu dùng ở string) nếu Return không

tồn tại hoặc Return được gọi mà không có phần <giá trị> theo sau.

Ví dụ

Đoạn mã sau thực hiện việc định nghĩa hàm _RepeatText để lặp lại n lần một chuỗi

$str = "abc"

$new_str = _RepeatText($str, 10, "")

MsgBox(0,"_RepeatText 1", "Source : " & $str & @CRLF & "New string : "

& $new_str)

$str = "Love"

$new_str = _RepeatText($str, 5, " - ") ; ngăn cách chuỗi bằng " - "

Page 66: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

MsgBox(0,"_RepeatText 2", "Source : " & $str & @CRLF & "New string : "

& $new_str)

Func _RepeatText($string, $how_many, $delim)

; $string sẽ chứa chuỗi dữ kiện được truyền từ ngoài vào

; $how_many cho biết sẽ lặp lại bao nhiêu lần

; $delim chỉ định ký tự nào dùng để ngăn cách giữa hai chuỗi được lặp lại

Local $Rep_str =""

For $i=1 To $how_many

$Rep_str &= $string & $delim

Next

Return $Rep_str

EndFunc

TRUYỀN DỮ KIỆN CHO HÀM

Đầu tiên ta có vài khái niệm cần nhắc lại :

Tham biến : là các biến cục bộ, đại diện cho chương trình con để tiếp

nhận dữ kiện

Đối số : thực chất là các dữ-kiện-cụ-thể mà ta truyền cho tham biến của

hàm. Tuy nhiên, các dữ kiện ta truyền cho tham biến không phải lúc nào

cũng là một giá trị cụ thể. Thông thường nó là một biến bên ngoài. Biến bên

ngoài này cũng chính là đối số của hàm.

Nói chung, để truyền dữ kiện cho chương trình con ta có hai cách.

- Cách thứ nhất là “truyền bằng trị”, phương pháp này sao chép giá trị của một đối

số vào tham biến, và các thao tác trên tham biến không làm ảnh hưởng đến đối số.

Ví dụ :

Hi("Mary")

$nick = "Lovely Cat"

Hi($nick)

Page 67: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ
Page 68: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Func Hi($name)

$greeting = "Hello, "& $name& ". Have a nice day!"

MsgBox(0,"Hi", $greeting)

EndFunc

- Cách thứ hai là “truyền bằng tham chiếu”, tức là dùng tham biến để thao tác trực

tiếp trên đối số được truyền vào. Mọi thay đổi trên tham biến đều ảnh hưởng đến

đối số. Để làm được đều này ta sử dụng từ khóa ByRef

BYREF

Như đã nói ở trên, khi muốn tham biến liên kết với đối số truyền vào, ta đặt ByRef

vào trước tham biến lúc khai báo.

Ví dụ, đoạn mã này thực hiện việc tráo đổi giá trị giữa hai biến $var1 và $var2 :

$var1 = 100

$var2 = 50

MsgBox(0,"Orginal", "Orginal value : $var1 = " & $var1 & ", $var2

= " & $var2)

_Swap($var1, $var2)

MsgBox(0,"Modified", "Modified value : $var1 = " & $var1 &

", $var2 = " & $var2)

Func _Swap(ByRef $a, ByRef $b)

$temp = $a

$a = $b

$b = $temp

EndFunc

Ban đầu ta truyền vào hàm _Swap hai đối số là $var1 và $var2. Do hai tham số $a,

$b có sử dụng ByRef nên khi ta tráo đổi giá trị giữa $a và $b thì cũng làm cho giá

trị của $var1 và $var2 tráo đổi theo.

CONST

Page 69: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Bạn từng biết rằng, Const là từ khóa dùng để khai báo hằng số. Thì khi sử dụng

trong hàm cũng vậy, việc đặt Const phía trước tham biến, sẽ làm cho giá trị của

tham biến không thể thay đổi trong suốt quá trình thực thi hàm. Giá trị này được

truyền chỉ một lần từ phía đối số.

DEFAULT

Từ khóa này không được dùng trong các biểu thức tính toán. Nó được dùng như

một cờ thông báo rằng sẽ sử dụng giá trị mặc định của tham biến đó bên trong

hàm. Các tham số sử dụng giá trị mặc định và các tham số sử dụng giá trị bắt buộc

có thể được khai báo xen kẽ nhau, không cần phải theo trật tự. (xem thêm chú ý số

3 bên dưới)

Ví dụ :

WinMove("[active]","",default, default, 200,300) ; just resize the

active window (no move)

MyFunc2(Default,Default)

Func MyFunc2($Param1 = Default, $Param2 = 'Two', $Param3 =

Default)

If $Param1 = Default Then $Param1 = 'One'

If $Param3 = Default Then $Param3 = 'Three'

MsgBox(0, 'Params', '1 = ' & $Param1 & @LF & _

'2 = ' & $Param2 & @LF & _

'3 = ' & $Param3)

EndFunc

CÁC CHÚ Ý

Việc sử dụng cách truyền bằng trị, bằng tham chiếu hay tất cả những gì

được nêu trong phần này thì tùy vào trường hợp mà ta dùng. Không nhất

thiết là phải viết hết khi định nghĩa một hàm

Page 70: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Để truyền một mảng vào hàm, thì ta chỉ cần nêu ra tên của mảng đó,

không cần dùng cặp dấu ngoặc vuông. Khi xử lý, nếu bạn xác định chiều

dài của mảng được truyền vào, ta cần gọi hàm UBound.

Lúc khai báo tham biến, bạn có thể gán cho tham biến những giá trị mặc

định. Trong quá trình gọi hàm, nếu người dùng không truyền dữ kiện cho

tham biến đó thì giá trị mặc định sẽ được dùng. Có một lưu ý quan trọng là

các tham biến có dùng giá trị mặc định, thì tất cả phải được đặt ở phía sau

các tham biến không dùng giá trị mặc định. Ngoài ra còn có cách dùng từ

khóa Default như đã nêu ở trên.

CÁC THƯ VIỆN TRONG AUTOIT v3

Include Description

Array.au3 Functions that assist with array management

AVIConstants.au3 AVI Constants

ButtonConstants.au3 Button Constants

Color.au3 Functions that assist with color management

ComboConstants.au3 ComboBox Constants

Constants.au3 Various AutoIt Constants

Date.au3 Functions that assist with dates and times

DateTimeConstants.au3 DateTime Control Constants

EditConstants.au3 Edit Constants

File.au3 Functions that assist with files and directories

GuiCombo.au3 Functions that assist with ComboBox

GUIConstants.au3 Includes all GUI related constants

GUIConstantsEx.au3 Constants to be used in GUI applications

GUIDefaultConstants.au3 GUI default control styles

Page 71: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

GuiEdit.au3 Functions that assist with Edit control

GuiIPAddress.au3 Used to create a GUI IP Address Control

GuiList.au3 Functions that assist with Listbox

GuiListView.au3 Functions that assist with ListView

GuiMonthCal.au3 Functions that assist with MonthCal

GuiSlider.au3 Functions that assist with Slider Control “Trackbar”

GuiStatusBar.au3 Functions that assist with the Statusbar control

GuiTab.au3 Functions that assist with the Tab Control

GuiTreeView.au3 Functions that assist with TreeView

IE.au3 Internet Explorer Automation UDF Library for

AutoIt3

Inet.au3 Functions that assist with the Internet

ListBoxConstants.au3 ListBox Constants

ListViewConstants.au3 ListView Constants

Math.au3 Functions that assist with mathematical calculations

Memory.au3 Memory management routines

Misc.au3 Functions that assist with Common Dialogs

Process.au3 Functions that assist with process management

ProgressConstants.au3 Progress Constants

SliderConstants.au3 Slider Constants

Sound.au3 Functions that assist with Sound files

SQLite.au3 Functions that assist access to an SQLite database

SQLite.dll.au3 Inline SQLite3.dll

StaticConstants.au3 Static Constants

StatusBarConstants.au3 StatusBar Constants

Page 72: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

String.au3 Functions that assist with String manipulation

TabConstants.au3 Tab Constants

TreeViewConstants.au3 TreeView Constants

UpDownConstants.au3 UpDown Constants

Visa.au3 VISA (GPIB & TCP) library

WindowsConstants.au3 Windows Constants

CÁC HÀM MÔI TRƯỜNG THÔNG DỤNG

Do số lượng các hàm trong AutoIt hiện nay rất lớn (trên 2200 hàm), nên phần này

không trình bày tất cả các hàm mà chỉ nói sơ bộ chức năng của một số hàm thông

dụng liên quan đến môi trường Windows. Còn các hàm liên quan đến chuỗi, toán

học, chuyển đổi,...thì các bạn tra cứu trong file help của AutoIt. Các chủ đề ở đây

bao gồm :

Quản lý môi trường

Quản lý thư mục

Quản lý tập tin

Quản lý ổ đĩa.

1. ClipGet( )

2. ClipPut(“<value>”)

3. MemGetStats( )

4. DirCopy( “nguồn”, “đích” [, flag])

5. DirMove( “nguồn”, “đích” [,flag])

6. DirCreate( “path”)

7. DirRemove( “path” [, DelAll])

8. DirGetSize( “path” [,flag])

9. FileCopy( “nguồn”, “đích” [,flag])

Page 73: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

10. FileMove( “file_nguồn” , “nơi đến” [, flag])

11. FileDelete( “path”)

12. FileRecycle( “nguồn”)

13. FileRecycleEmpty( [“ổ đĩa”])

14. FileGetSize( “file_name”)

15. FileExist( “path”)

16. FileInstall( “source”, “dest” [, flag])

17. FileOpenDialog ( "title", "init dir", "filter" [, options [, "def

name" [, hwnd]]] )

18. FileSaveDialog ( "title", "init dir", "filter" [, options [, "def

name" [, hwnd]]] )

19. FileSelectFolder ( "dialog text", "root dir" [, flag [, "initial dir"

[, hwnd]]] )

20. DriveGetDrive( "type")

21. DriveGetLabel( "path")

22. DriveGetSerial( "path")

23. DriveSetLabel( "path", "label")

24. DriveSpaceFree( "path")

25. DriveSpaceTotal( "path")

26. DriveStatus( "path")

Quản lý môi trường

1. ClipGet( )

Lấy văn bản từ clipboard

Th. Công : trả về một chuỗi chứa đoạn text trong clipboard

Hỏng : gán @error = 1 nếu clipboard rỗng

= 2 nếu chứa mục nhập không phải là text

= 3 hoặc 4 nếu không thể truy cập clipboard

Page 74: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Chú ý : nếu có nhiều file/thư mục được lưu trong clipboard, thì đường dẫn

và tên file/thư mục được trả về, mỗi tên được ngăn cách bởi ký tự @LF

2. ClipPut(“<value>”)

Ghi một đoạn text vào clipboard

<value> : là một chuỗi muốn ghi vào clipboard

Th. Công : trả về 1

Hỏng : trả về 0

Chú ý : nội dung đã có trước đó trong clipboard sẽ bị viết đè. Một chuỗi

rỗng “ “ sẽ xóa sạch clipboard

3. MemGetStats( )

Lấy các thông tin liên quan đến bộ nhớ và trả về một mảng gồm bảy phần tử với

nội dung :

$array[0] = Memory Load (Percentage of memory in use)

$array[1] = Total physical RAM

$array[2] = Available physical RAM

$array[3] = Total Pagefile

$array[4] = Available Pagefile

$array[5] = Total virtual

$array[6] = Available virtual

Đơn vị tính là Kilobyte (Kb)

Quản lý thư mục

1. DirCopy( “nguồn”, “đích” [, flag])

Copy một thư mục và tất cả các file, các thư mục con bên trong thư mục nguồn

đến thư mục đích

“nguồn” : chỉ định thư mục cần copy (không có dấu \ ở cuối)

“đích” : thư mục sẽ chứa các phần được sao chép đến (không chứa dấu \ ở

cuối)

Page 75: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

flag : (tùy chọn) nếu flag = 0 thì không viết đè các file đã có ở thư mục

đích (mặc định)

= 1 sẽ viết đè các file đã có

2. DirMove( “nguồn”, “đích” [,flag])

Dời một thư mục được chỉ định trong “nguồn” sang thư mục được chỉ định trong

“đích”

3. DirCreate( “path”)

Tạo một thư mục

Path : đường dẫn đầy đủ và tên của thư mục cần tạo. Ví dụ

: “c:\test\folder1”

Th. Công : trả về 1

Hỏng : trả về 0

Chú ý : hàm này sẽ tự tạo các thư mục cha (cấp trên) được chỉ định bởi

path, nếu như chúng chưa có trên đĩa

4. DirRemove( “path” [, DelAll])

Xóa một thư mục

Path : đường dẫn của thư mục cần xóa

DelAll : = 0 (mặc định) không xóa các file và thư mục con bên trong

= 1 sẽ xóa tất cả các file và thư mục con bên trong (giống như lệnh DelTree trong

DOS)

5. DirGetSize( “path” [,flag])

Trả về kích thước (tính theo byte) của thư mục chỉ định

Path : thư mục cần lấy kích thước. ví dụ : “c:\windows”

Flag : [tùy chọn] trả về kết quả mở rộng hay không

= 0 (mặc định) không trả về kết quả mở rộng

= 1 trả về một mảng có nội dung sau :

$array[0] = Size

Page 76: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

$array[1] = Tổng số file tìm thấy

$array[2] = Tổng số thư mục tìm thấy

= 2 không lấy kích thước của các file trong thư mục con

Th. Công : trả về kích thước của thư mục (>=0)

Hỏng : trả về -1 và gán @error =1 nếu đường dẫn không tồn tại

Quản lý tập tin

1. FileCopy( “nguồn”, “đích” [,flag])

Sao chép một hoặc nhiều file từ thư mục “nguồn” sang thư mục “đích”

“nguồn” : đường dẫn chứa các file cần copy

“đích” : thư mục sẽ chứa các file được sao chép đến

Flag : [tùy chọn] nếu flag

= 0 (mặc định) không viết đè các file trùng tên

= 1 viết đè các file trùng tên trong thư mục “đích”

= 8 tự tạo cấu trúc thư mục “đích” nếu như đích đến không tồn tại.

Th. Công : trả về 1

Hỏng : trả về 0

Chú ý : nếu bạn gán flag = 9, thì tương đương (1+8). Giá trị này báo cho

biết rằng sẽ viết đè nếu có file trùng tên và tự tạo cấu trúc thư mục đích đến. Muốn

sao chép nhiều file, ta sử dụng ký tự * để làm giá trị tùy ý. Ví dụ : *.mp3 để chọn

tất cả file mp3.

2. FileMove( “file_nguồn” , “nơi đến” [, flag])

Di chuyển một hoặc nhiều file sang thư mục khác

File_nguồn : đường dẫn và tên tập tin cần dời đi

Nơi đến : đường dẫn để chứa các file cần dời đi. Nếu tham số này nêu ra

một tên tập tin khác, thì file_nguồn sau khi dời đến thư mục chỉ định

sẽ bị đổi tên.

Flag : giống như lệnh FileCopy

Page 77: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Th. Công : trả về 1

Hỏng : trả về 0

Chú ý : nếu đường dẫn chứa file nguồn và nơi đến không cùng phân

vùng, thì một tác vụ copy và một tác vụ xóa được thực hiện.

3. FileDelete( “path”)

Xóa một hoặc nhiều file được chỉ định trong “path”

Path : đường dẫn của các file cần xóa

Th. Công : trả về 1

Hỏng : trả về 0 nếu file không tồn tại hoặc không thể xóa

Chú ý : nếu muốn xóa tất cả file trong một thư mục, sử dụng mặt nạ * .

* để đại diện cho tất cả các file. Để ý rằng, một vài file có thiết lập

thuộc tính sẽ không thể xóa được.

4. FileRecycle( “nguồn”)

Đưa một file hoặc thư mục vào thùng rác

Nguồn : đường dẫn và tên file hoặc thư mục cần chuyển vào thùng rác.

Sử dụng * để đại diện nhiều file.

Th. Công : trả về 1

Hỏng : trả về 0

Chú ý : để xóa một thư mục thì không sử dụng ký tự “ \” ở cuối đường

dẫn chỉ định trong “nguồn”

5. FileRecycleEmpty( [“ổ đĩa”])

Làm rỗng thùng rác

[ổ đĩa] : tham số này tùy chọn, cho biết cần đổ thùng rác ở ổ đĩa nào. Nếu

bỏ qua sẽ đổ bỏ ở tất cả ổ đĩa.

Th. Công : trả về 1

Hỏng : trả về 0

Chú ý : để hàm này làm việc máy bạn phải IE từ phiên bản 4 trở lên.

Page 78: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ
Page 79: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

6. FileGetSize( “file_name”)

Trả về kích thước của tập tin (tính theo byte)

File_name : đường dẫn và tên của file cần lấy

Th. Công : trả về kích thước của file (byte)

Hỏng : trả về 0 và gán @error = 1

Chú ý : lệnh này không làm việc với thư mục. Lấy kết quả chia cho

1024 để có được đơn vị tính theo kilobyte, chia cho 1048576 để có

được kích thước ở megabyte.

7. FileExist( “path”)

Kiểm tra xem file hoặc thư mục được nêu trong path có tồn tại hay không

Path : file hoặc thư mục cần kiểm tra

Th. Công : trả về 1

Hỏng : trả về 0 nếu đường dẫn chứa trong path không tồn tại

Chú ý : hàm này cũng sẽ trả về 0 nếu bạn chỉ định một ổ đĩa mềm mà lại

không có chứa đĩa

8. FileInstall( “source”, “dest” [, flag])

Bao gồm và cài đặt một file với đoạn mã đã biên dịch

Source : đường dẫn nguồn của những file cần dịch. Đường dẫn này phải là

một chuỗi rõ ràng, không được phép là một biến. Có thể sử dụng

đường dẫn liên quan như .\ hoặc ..\

Dest : đường dẫn đích đến của các file cần extract. Nếu muốn chỉ định

một thư mục thì dùng dấu \ ở cuỗi. Cho phép dest là biến số

Flag : cho biết có chép đè khi gặp file trùng tên hay không.

= 0 (mặc định) : không viết đè

= 1 : viết đè

Chú ý : hàm này được thiế kế là để gom các file vào trong một đoạn mã đã

biên dịch. Những file được gom vào có thể được extract (xả nén)

Page 80: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

trong quá trình chạy của file script đã biên dịch và lệnh này được thực

thi. Bạn có thể hình dung là nếu bạn đưa một file ảnh vào trong file

script thì kích thước của file script sau khi biên dịch sẽ tăng lên. Một

điều nữa là các thông tin gốc về thời gian tạo, chỉnh sửa cũng sẽ được

giữ lại khi cài đặt

9. FileOpenDialog ( "title", "init dir", "filter" [, options [, "def name" [, hwnd]]] )

Gọi hộp thoại Open File (hộp thoại xuất hiện khi bạn chọn lệnh File>Open.. trong

các ứng dụng)

Title : tiêu đề của hộp thoại khi xuất hiện

Init dir : thư mục mặc định để mở khi hộp thoại vừa xuất hiện

Filter : chỉ định một hay nhiều loại tập tin cần mở. ví dụ như : “All

(*.*)” hoặc “Text files (*.txt)” hoặc “All (*.*) | Text files (*.txt)”

Options : [tùy chọn] cho phép mở rộng một vài điều kiện, sử dụng giá trị

sau :

1 = file phải tồn tại (nếu người dùng gõ tên file)

2 = đường dẫn phải tồn tại (nếu gõ đường dẫn)

4 = cho phép chọn nhiều file

8 = nhắc nhở tạo file mới nếu file không tồn tại

Def name : tên đề nghị cho người dùng. Mặc định là rỗng (“”)

Hwnd : handle của cửa sổ được xem như là cửa sổ mẹ của hộp thoại

Open File

Th. Công : trả về đường dẫn đầy đủ và tên của tập tin được chọn. Nếu có

nhiều file được chọn thì trả về chuỗi có dạng như sau : “thư mục |

file1 | file2 |…”

Hỏng : gán @error = 1

Chú ý : bộ lọc phần mở rộng và kết quả trả về cho nhiều file được chọn,

đều được ngăn cách mỗi phần bởi dấu gạch đứng “|”.

Page 81: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Bạn cũng có thể kết hợp các giá trị của Options lại với nhau để có nhiều lựa

chọn. ví dụ : 1+4 để vừa có lựa chọn là “file phải tồn tại” và “ cho

phép chọn nhiều file”

10. FileSaveDialog ( "title", "init dir", "filter" [, options [, "def name" [, hwnd]]] )

Gọi hộp thoại save file (hộp thoại xuất hiện khi bạn gọi File > Save)

Title : tiêu đề của hộp thoại

Init dir : thư mục mặc định để mở khi hộp thoại vừa xuất hiện

Filter : chỉ định một hay nhiều loại tập tin cần mở

Options : [tùy chọn] 2 = đường dẫn phải tồn tại (nếu người dùng gõ

đường dẫn kết thúc vơi dấu \ )

16 = nhắc nhở việc ghi đè file trùng tên

Def name : tên đề nghj cho ng dùng. Mặc định là rỗng “ “

Hwnd : handle của cửa sổ được xem như là cửa sổ mẹ của hộp thoại

Save File

Th. Công : trả về đường dẫn đầy đủ và tên của tập tin được chọn. Nếu có

nhiều file được chọn thì trả về chuỗi có dạng như sau : “thư mục |

file1 | file2 |…”

Hỏng : gán @error = 1

Chú ý : bộ lọc phần mở rộng và kết quả trả về cho nhiều file được chọn,

đều được ngăn cách mỗi phần bởi dấu gạch đứng “|”.

11. FileSelectFolder ( "dialog text", "root dir" [, flag [, "initial dir" [, hwnd]]] )

Gọi hộp thoại Browse For Folder (hộp thoại chỉ hiện cây thư mục để chọn)

Dialog text : văn bản sẽ hiển thị trên hộp thoại, cho phép bạn nhắc nhở chức

năng

Root dir : thư mục gốc của cây tập tin trong GUI. Sử dụng “ “ để chọn

Desktop.

Page 82: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Flag : [tùy chọn] cho phép thêm một vài một lựa chọn :

1 = hiển thị nút Create Folder (đòi hỏi có IE6 trở lên)

2 = sử dụng Kiểu hộp thoại mới (New Dialog style, đòi hỏi IE6 trở lên)

4 = hiển thị một control Edit để gõ tên thư mục mới

Initial dir : Thư mục mặc định sẽ chọn khi hộp thoại xuất hiện. Sử dụng “ “

để chọn Desktop

Th. Công : trả về đường dẫn đầy đủ của thư mục được chọn

Hỏng : trả về chuỗi rỗng “ “ và gán @error = 1 nếu người dùng đóng

(cancel) cửa sổ.

Quản lý ổ đĩa

1. DriveGetDrive( "type")

Liệt kê tất cả các ổ đĩa có trên hệ thống

Type : loại ổ đĩa cần tìm :

"ALL", "CDROM", "REMOVABLE", "FIXED", "NETWORK", "

RAMDISK" hoặc "UNKNOWN"

Th. Công : trả về một mảng, mỗi phần tử là một chuỗi chứa ký tự ổ đĩa được

tìm thấy (ví dụ như C: ). Phần tử đầu tiên trong mảng (có chỉ mục 0)

sẽ cho biết tổng số ổ đĩa được tìm thấy.

Hỏng : trả về chuỗi rỗng và gán @error = 1

2. DriveGetLabel( "path")

Cho biết tên của ổ đĩa

Path : ổ đĩa cần lấy tên. Ví dụ : "C:\", "e:\"

Th. Công : trả về chuỗi là tên của ổ đĩa

Hỏng : gán @error = 1

3. DriveGetSerial( "path")

Cho biết số serial của ổ đĩa

Path : ổ đĩa cần lấy số serial

Page 83: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Th. Công : trả về một chuỗi là số serial

Hỏng : gán @error = 1

4. DriveSetLabel( "path", "label")

Gán nhãn (tên) cho ổ đĩa

Path : ổ đĩa cần gán nhãn (như "c:\")

Label : nhãn mới để gán cho ổ đĩa (tối đa 11 ký tự)

Th. Công : trả về 1

Hỏng : trả về 0

5. DriveSpaceFree( "path")

Lấy kích thước còn trống của ổ đĩa

Path : ổ đĩa cần lấy. ví dụ : "C:\"

Th. Công : trả về kích thước còn trống của ổ đĩa (tính theo megabyte)

Hỏng : trả về 0 và gán @error = 1

6. DriveSpaceTotal( "path")

Cho biết tổng dung lượng của ổ đĩa

Path : ổ đĩa cần lấy. ví dụ : "C:\"

Th. Công : trả về tổng dung lượng của ổ đĩa (tính theo megabyte)

Hỏng : gán @error = 1

7. DriveStatus( "path")

Trả về trạng thái của ổ đĩa

Path : ổ đĩa cần lấy trạng thái

Trả về một trong các giá trị sau :

"UNKNOWN" : ổ đĩa có thể không được định dạng

"READY" : ổ đĩa đang sẵn sàng làm việc

"NOTREADY" : ổ đĩa mềm hoặc CD không có đĩa

"INVALID" : ổ đĩa có thể không tồn tại

GIỚI THIỆU VỀ GUI

Page 84: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ
Page 85: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

GUI là từ viết tắt của Graphic User Interface – giao diện người dùng bằng đồ họa.

Điều này có lẽ không cần phải nóii nhiều vì bạn đã thấy nó ngay từ khi tiếp xúc với

máy tính, chúng là các biểu tượng, cửa sổ, nút bấm, ... . Cách đây vài chục năm,

cái thời mà DOS còn ngự trị trên máy PC thì có lẽ bạn sẽ gặp rắc rối khi phải nhớ

và thao tác một cách chậm chạp với các câu lệnh dài dòng, lắm cú pháp. Còn đến

cái thời mà Windows bành trướng sức mạnh của mình bằng giao diện đồ họa và

các tính năng mới mẻ, thì việc bạn cần làm khi sử dụng máy tính là nhớ các thao

tác. Tất cả các lệnh và hướng dẫn đều có trên màn hình, bạn chỉ cần chọn và nhấn

chuột hoặc phím. Thật là tuyệt cho người sử dụng.

Còn đối với người lập trình thì sao ? Khi mới bắt đầu tiếp xúc với việc lập trình

ứng dụng trong windows , sẽ không ít người trong chúng ta ngán ngẫm . Tại sao?

Đơn giản là vì nó có quá nhiều hàm và cách tổ chức cấu trúc thì chẳng dễ nhớ tí

nào. Nếu bạn đã từng học qua C/C++ thì bạn sẽ hiểu cái cảm giác đó. Thế AutoIt

sẽ giúp cho công việc của ta dễ dàng hơn à ? Xin thưa là đúng như vậy. Mặc dù

bên trong Windows đã được xây dựng sẵn một thư viện đồ sộ cho việc lập trình

các ứng dụng có giao diện , nhưng cú pháp của nó quả là rắc rối . Và chúng ta –

những người sử dụng AutoIt có thể khai thác thư viện này theo một cách đơn giản

nhất mà AutoIt đã hỗ trợ. Sự hỗ trợ mà AutoIt mang đến cho tôi và bạn chính là

các hàm để tạo nên cửa sổ , các thành phần con trên nó (ta gọi là các control ) và

những thứ liên quan đã được thay thế với cú pháp ngắn gọn, đơn giản và sáng sủa

hơn.

Đến đây bạn có thể yên tâm rằng , học AutoIt sẽ không hề vô dụng. Tuy nhiên mọi

thứ sẽ không phải là màu hồng như bạn nghĩ vì bạn sẽ tốn khá nhiều thời gian để

tìm hiểu về những gì AutoIt đang có. Trước khi soạn tài liệu này , tôi đã phải tốn

đến mấy tháng tìm hiểu một cách "lười biếng" về ngôn ngữ này. Hy vọng rằng các

bạn sẽ không phải tốn quá nhiều thời gian như tôi. Nói vòng vo như thế cũng đủ rồi

, bây giờ là nói vào nội dung chính.

Page 86: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Các control mà AutoIt hỗ trợ cho ta bao gồm :

Label Một mẫu văn bản đơn giản Button Nút bấm Input Vùng soạn thảo văn bản chỉ có một dòng Edit Vùng soạn thảo văn bản có nhiều dòng

Checkbox Một ô vuông cho phép bạn đánh dấu hoặc không đánh dấu

Radio Một nút tròn cho phép bạn chỉ được chọn một nút trong số nhiều nút

Combo Một danh sách có nút bấm để sổ xuống List Một danh sách Date Một hộp chọn ngày Pic Vùng để hiển thị ảnh Icon Vùng để hiển thị Icon Progress Thanh tiến trình Tab Một nhóm các control sẽ được chứa trong tab

UpDown Một control cho phép đính kèm cạnh bên control input

Avi Hiển thị đoạn clip AVI Menu Menu chức năng trên cửa sổ

ContextMenu Một menu ngữ cảnh sẽ xuất hiện khi bạn nhấn chuột phải (hoặc trái, tùy vị trí)

TreeView Một cây phân nhánh như trong Windows Explorer Slider Một thanh trượt như thanh điều khiển âm lượng ListView Control hiển thị thông tin của cột trong listview ListViewItem Control hiển thị các mục trong listview

Graphic Control để hiển thị đồ họa được vẽ với hàm GUICtrlSetGraphic.

Dummy Control dummny (bù nhìn)

Đây là hình ảnh về các control mà ta có thể tạo lập được Error!

Page 87: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Trước khi tìm hiểu về cách thức tạo một GUI , ở đây xin giới thiệu sơ lược với các

bạn các hàm cơ bản mà ta sẽ thường sử dụng để thao tác với một ứng dụng có cửa

sổ.

Hàm Giải thích

GUICreate Tạo một cửa sổ

GUICtrlCreate...

Tạo ra các control khác nhau trên cửa sổ (dấu …. sẽ được thay

bằng tên cụ thể)

GUISetState Hiển thị hoặc ẩn cửa sổ

GUIGetMsg Lấy các thông tin về các sự kiện diễn ra trên gui

GUICtrlRead Đọc dữ liệu từ control

GUICtrlSetData Gán/Thay đổi dữ liệu trên control

GUICtrlSet... Thay đổi các lựa chọn trên control (ví dụ như màu sắc , style,…)

TẠO GIAO DIỆN NGƯỜI DÙNG

Phần này sẽ hướng dẫn bạn cách thức để tạo nên một ứng dụng có giao diện hẳn

hoi. Một điều quan trọng mà bạn cần nhớ là một ứng dụng trên windows không

nhất thiết phải có giao diện (ví dụ như các dịch vụ của win) và các thao tác xử lý

đối với một ứng dụng trên Windows là tập trung vào xử lý sự kiện xảy ra trên cửa

sổ của ứng dụng đó. Ở đây, các bạn cần nắm được vài chú ý sau :

- Control ID : nó thực chất là một số nguyên (>0) đại diện cho

control. Thông thường ta không biết số này là bao nhiêu (vì do hệ điều

hành cung cấp khi chạy ứng dụng) và khi tạo ra một control ta thường

gán nó vào một biến, biến đó là tên đại diện, sẽ chứa ID của control

đó. Do trên cửa sổ của bạn sẽ có nhiều thành phần, mỗi thành phần

cần phải có một cái tên để quản lý và khai thác. Ví dụ bạn có hai nút

Page 88: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

bấm trên cửa sổ thì bạn phải đặt tên cho nút thứ nhất là btn1 (hoặc

btnOK) và nút thứ hai là btn2 (btnCancel) chẳng hạn. Để khi người

dùng nhấp chuột thì ta biết rằng nút bấm nào vừa được tác động.

- Control ID : là một số nguyên duy nhất, không bao giờ có sự trùng

lặp (do bộ nhớ được phân chia để chứa các thành phần ).

- Handle : cái từ này tôi không biết nên dịch thế nào cho đúng

nghĩa nhưng có thể tạm hiểu rằng , nó là một giá trị đặc biệt được tạo

ra và gán vào một cửa sổ khi cửa sổ đó được tạo. Thông thường ,

handle chỉ được dùng cho cửa sổ , ít khi dùng cho control. Khi nói

đến handle , người ta nghĩ ngay đến định danh của một cửa sổ (hay

GUI). Và handle là một dạng dữ liệu đặc biệt , nó không phải chuỗi

hay số.

Để tạo được một ứng dụng có giao diện đồ họa , thì thành phần bạn cần tạo đầu

tiên chính là một cửa sổ. Sau khi có cửa sổ thì chúng ta sẽ tạo tiếp các thành phần

con trên nó (các control).

Muốn tạo được cửa sổ ta cần gọi đến hàm GuiCreate. Có cú pháp hoàn chỉnh như

sau :

GUICreate ( "title" [, width [, height [, left [, top [, style [, exStyle [,

parent]]]]]]] )

Các phần được rào trong cặp dấu ngoặc vuông [ ] là tùy chọn, có thể có hoặc

không. Trong đó ,

Các tham số

Title : là tiêu đề của cửa sổ (văn bản này sẽ hiển thị trên thanh tiêu đề

khi cửa sổ xuất hiện).

Width : độ rộng của cửa sổ (tính theo pixel)

Heigh : chiều cao của cửa sổ (tính theo pixel)

Page 89: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Left : vị trí bên trái của màn hình (tương ứng với tọa độ x). Gán -1 là

canh giữa màn hình. Nếu đã gán giá trị cho left, thì Top cũng phải

được gán giá trị.

Top : vị trí phía trên của màn hình (tương ứng với tọa độ y). Gán -1 đề

canh giữa màn hình

Style : xác định style (kiểu) cửa sổ. Xem trong GUI Control Styles

Appendix của file help.

Sử dụng -1 để dùng style mặc định, bao gồm các giá trị sau

: $WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP,

$WS_SYSMENU.

Các style $WS_CLIPSIBLINGS, và $WS_SYSMENU luôn được sử dụng

nếu như style $WS_MAXIMIZEBOX hoặc $WS_SIZEBOX được chỉ

định.

exStyle : xác định style mở rộng cho cửa sổ (xem bảng Extended Style

Table bên dưới ). Mặc định là -1.

Parent : handle của cửa sổ đã được tạo ra trước đó. Cửa sổ sắp tạo ra sẽ là

con của cửa sổ có handle vừa gán.

Trả về

Thành công : hàm trả về handle của cửa sổ

Hỏng : hàm trả về 0 và gán @error = 1

Chú ý

Hai tham số Left và Top sẽ xác định vị trí xuất hiện của hộp thoại trên

màn hình. Điểm giao nhau của hai tham số này chính là góc trái trên của hộp

thoại.

Theo mặc định, các cửa sổ được tạo ra sẽ không thể có chức năng resize (dùng chuột để kéo lớn hoặc thu nhỏ kích thước của cửa sổ) và phóng lớn cực đại (maximize). Vì thế, khi bạn muốn sử dụng bất kỳ tính năng nào ở

Page 90: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

trên thì có thể thêm vào tham số style các giá trị

WS_SIZEBOX hoặc WS_MAXIMIZEBOX.

Tuy nhiên, khi sử dụng WS_SIZEBOX thì các style

WS_MINIMIZEBOX, WS_CAPTION, WS_POPUP, WS_SYSMENU lại

không được thiết lập. Cách tốt nhất để tạo nên một hộp thoại có thể resize là

sử dụng WS_OVERLAPPEDWINDOW.

Khi dùng $WS_EX_MDICHILD cho tham số style mở rộng , thì vị trí

cửa sổ là vị trí liên hệ đến vùng client của cửa sổ bố-mẹ (parent). Tham số

$WS_EX_LAYERED cho phép có một bức ảnh trong suốt bên trên ảnh nền

đã định nghĩa trong cửa sổ parent.

Để kết hợp các style do bạn chỉ định với style mặc định, ta sử dụng :

BitOr($GUI_SS_DEFAULT_GUI, newstyle,...).

Muốn sử dụng được các hằng số liên quan đến GUICreate, bạn cần gọi

#include <WindowsConstants.au3>

Bảng các style mở rộng (Extended style table)

Style mở rộng Kết quả

$WS_EX_ACCEPTFILES

Cho phép một control edit hoặc input được tạo trên GUI có thể nhận được tên của file được kéo và thả vào. Control cũng phải được gán trạng thái $GUI_DROPACCEPTED bằng hàm GUICtrlSetState. Đối vớ các control khác, thông tin của việc drag&drop có thể được truy lại với @GUI_DRAGID, @GUI_DRAGFILE, @GUIDROPID.

$WS_EX_APPWINDOW Yêu cầu cửa sổ luôn nổi ở-trên thanh taskbar khi nó xuất hiện.

$WS_EX_CLIENTEDGE Cửa sổ sẽ được bao với viền bị trũng xuống (sunken).

Page 91: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

$WS_EX_CONTEXTHELP

Bao gồm một dấu chấm hỏi ở thanh tiêu đề của cửa sổ. Không dùng được với WS_MAXIMIZEBOX hoặc WS_MINIMIZEBOX.

$WS_EX_DLGMODALFRAME

Tạo một cửa sổ có viền lớn gấp đôi bình thường. Tùy chọn, cửa sổ có thể được tạo với một thanh tiêu đề bằng cách chỉ định WS_CAPTION trong tham số style

$WS_EX_MDICHILD Tạo một cửa sổ con bên trong cửa sổ bố-mẹ (simulation not real MDI).

$WS_EX_OVERLAPPEDWINDOW Kết hợp style WS_EX_CLIENTEDGE và WS_EX_WINDOWEDGE

$WS_EX_STATICEDGE

Tạo một cửa sổ có viền chỉ bằng một phần ba so với bình thường , style này được sử dụng cho các mục không chấp nhận viêc nhập liệu của người dùng

$WS_EX_TOPMOST GUI được tạo với style này sẽ luôn ở trên các cửa sổ khác, thậm chí khi GUI không được kích hoạt.

$WS_EX_TRANSPARENT Cửa sổ sẽ xuất hiện trong suốt bởi vì các bit của những cửa sổ liên quan bên dưới đã được vẽ lại

$WS_EX_TOOLWINDOW

Tạo ra một cửa sổ chứa công cụ, ta còn gọi là floating toolbar (thanh công cụ trôi nổi). Cửa sổ chứa công cụ sẽ có một thanh tiêu đề và font chữ nhỏ hơn cửa sổ bình thường. Cứa sổ này sẽ không xuất hiện trong taskbar hoặc trong hộp thoại khi bạn Alt-Tab. Nếu cửa sổ chứa công cụ có một menu hệ thống, icon của nó sẽ không hiển thị trên thanh tiêu đề. Tuy nhiên, bạn có thể ép chúng hiển thị bằng cách gõ phím Alt-Space.

$WS_EX_WINDOWEDGE Tạo cửa sổ được bao với viền nổi

$WS_EX_LAYERED Tạo một cửa sổ được xếp thành lớp (layer). Chú ý rằng cái này không sử dụng được cho

Page 92: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

các cửa sổ con

Ví dụ 1

Đoạn mã này tạo ra một cửa sổ, trên đó có chứa một label và một button. Khi bạn

nhấn vào Button sẽ tạo ra một số ngẫu nhiên và hiển thị ở label.

#include <GUIConstantsEx.au3>

$gui = GUICreate("Random number", 200, 100) ;tạo gui chính

;tạo nhãn sẽ hiển thị số vừa tạo

$label_num = GUICtrlCreateLabel("000", 20, 20, 160, 30)

;gán label này dùng font Arial, size là 14

GUICtrlSetFont(-1, 14, 400, 0, "Arial")

;tạo nút cấp phát số ngẫu nhiên

$button_gen = GUICtrlCreateButton("Generate random number", 20,

50, 160, 30)

GUISetState() ; hiển thị gui vừa tạo lên màn hình

while 1 ; vòng lặp xử lý thông điệp

$msg = GUIGetMsg() ;ghi nhận sự kiện xảy ra trên gui

Switch $msg

Case $GUI_EVENT_CLOSE ;nếu nhấn nút Close hoặc Alt-F4

ExitLoop ; thì thoát

Case $button_gen ;nếu nhấn nút cấp phát thì tạo số ngẫu nhiên

$num = Int(Random(-10^9, 10^9))

; gán vào label để hiển thị số vừa cấp phát

GUICtrlSetData($label_num, $num)

EndSwitch

WEnd

Ví dụ 2

Page 93: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Đoạn mã này minh họa việc tạo cửa sổ con có nền trong suốt bằng một ảnh gif.

#include <GUIConstantsEx.au3>

#include <WindowsConstants.au3>

Example( )

Func Example2()

Local $gui, $background, $pic, $basti_stay, $msg

Local $sFile =

RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\A

utoIt v3\AutoIt", "InstallDir") &

"\Examples\GUI\logo4.gif"

$gui = GUICreate("Background", 400, 100)

; background picture

$background = GUICtrlCreatePic(@SystemDir &

"\oobe\images\mslogo.jpg", 0, 0, 400, 100)

GUISetState(@SW_SHOW)

; transparent MDI child window

$pic = GUICreate("", 169, 68, 0, 0, $WS_POPUP,

BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $gui)

; transparent pic

$basti_stay = GUICtrlCreatePic($sFile, 0, 0, 169, 68)

GUISetState(@SW_SHOW)

Do

$msg = GUIGetMsg()

Until $msg = $GUI_EVENT_CLOSE

EndFunc

GUIDelete

Xóa bỏ một cửa sổ GUI và tất cả các control trên đó

Page 94: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

GUIDelete ( [winhandle] )

Các tham số

Winhandle [tùy chọn] handle của cửa sổ cần xóa , được trả về từ hàm GUICreate

(mặc định là GUI đã dùng trước đó.)

Trả về

Th.

Công : Returns 1.

Hỏng : Returns 0.

Chú ý

None.

GUIGetCursorInfo

Lấy thông tin về vị trí của con trỏ chuột (tính theo cửa sổ GUI)

GUIGetCursorInfo ( [winhandle] )

Các tham số

winhandle [tùy chọn] handle của cửa sổ muốn sử dụng. Nếu bỏ quên thì cửa sổ

hiện hành được sử dụng

Giá trị trả về

Th.

Công : Trả về một mảng có 5 phần tử , chứa các thông tin sau :

$array[0] = tọa độ X (chiều ngang)

$array[1] = tọa độ Y (chiều dọc)

$array[2] = nút thứ nhất của chuột được nhấn (thường là nút trái , 1 là có

Page 95: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

nhấn, 0 nếu không nhấn)

Page 96: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

$array[3] = nút thứ hai của chuột được nhấn (thường là nút phải , 1 là có

nhấn, 0 nếu không nhấn)

$array[4] = ID của control mà con trỏ chuột đang bay-lượn ở trên. Cho 0

nếu không có control

Hỏng

: Trả về 0 và gán @error=1

Chú ý

Tọa độ của con trỏ chuột được tính theo tọa độ bên trong GUI , chứ

không phải tính theo tọa độ màn hình

Nếu tham số "winhandle" được dùng thì cửa sổ được chỉ định sẽ trở

thành cửa -sổ-hiện-hành mới.

Việc lấy thông tin về vị trí của con trỏ chuột chỉ thành công khi dùng trên

một cửa sổ được tạo ra bằng hàm GUICreate. Khi không có winhandle thì

hàm chỉ thành công khi cửa sổ GUI được kích hoạt

Định danh của ListViewItem hoặc TreeViewItem sẽ không bao giờ được

trả về , chỉ trả về ID của ListView hoặc TreeView mà thôi.

GUIGetMsg

Lấy và trả về các sự kiện nào đã xảy trên GUI

GUIGetMsg ( [advanced] )

Các tham số

Advanced

[tùy chọn] trả về thông tin mở rộng chứa trong một mảng

0 = (default) trả về một sự kiện đơn lẻ.

1 = trả về một mảng chứa sự kiện và thông tin mở rộng

Giá trị trả về

Page 97: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Trả về một giá trị đơn hoặc một mảng tùy vào tham số Advanced

Sự kiện sẽ trả về định danh (ID) của control đã gởi đi thông điệp , hoặc nó là một

sự kiện đặc biệt (như là đóng hoặc thu nhỏ cửa sổ ,...). Hoặc trả về 0 nếu không có

sự kiện nào xảy ra.

ID của sự kiện ID của control đã gởi đi sự kiện

0 Không có sự kiện

$GUI_EVENT_CLOSE Hộp thoại bị đóng (click nút close hoặc

menu hệ thống hoặc một nút do ta tạo)

$GUI_EVENT_MINIMIZE Hộp thoại bị thu nhỏ (minimize) bởi click

nút bấm từ thanh tiêu đề

$GUI_EVENT_RESTORE Hộp thoại được phục hồi do nhấn nút ở

thanh taskbar

$GUI_EVENT_MAXIMIZE Hộp thoại được phóng lớn cực đại do

nhấn nút maximize

$GUI_EVENT_MOUSEMOVE Con trỏ chuột được di chuyển

$GUI_EVENT_PRIMARYDOWN Nút cơ bản của chuột được nhấn giữ

(thường là nút trái , nó tùy vào thiết lập

trong win)

$GUI_EVENT_PRIMARYUP Nút cơ bản của chuột được nhả ra

$GUI_EVENT_SECONDARYDOWN Nút thứ hai của chuột được nhấn giữ

(thường là nút phải)

$GUI_EVENT_SECONDARYUP Nút thức hai của chuột được nhả ra

$GUI_EVENT_RESIZED Cửa sổ được định lại kích thước (resize)

Page 98: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

$GUI_EVENT_DROPPED Kết thúc của hành động

kéo&thả @GUI_DRAGID,

@GUI_DRAGFILE và @GUI_DROPID

sẽ được sử dụng để truy lại ID hoặc tập tin

cho các control liên quan.

Khi sử dụng tham số Advanced thì thông tin mở rộng được trả về trong mảng như

sau :

$array[0] = 0 hoặc ID của sự kiện hoặc ID của control

$array[1] = Handle của cửa sổ đã phát ra sự kiện

$array[2] = handle của control đã tạo ra sự kiện (nếu có thể áp dụng)

$array[3] = tọa độ X hiện hành của con trỏ chuột (tính theo GUI)

$array[4] = tọa độ Y hiện hành của con trỏ chuột (tính theo GUI)

Nếu bạn sử dụng chế độ GUIOnEventMode thì

hàm GUIGetMsg luôn trả về 0 và @error được gán bằng 1.

Các nút minimize , restore và maximize sẽ không thực thi bất kỳ hành động gì

Chú ý

Hàm này sẽ tự động tạo ra khoảng dừng để không làm quá tải cho CPU nên nó có

thể sử dụng một cách an toàn trong vòng lặp khép kín mà không cần bất kỳ lệnh

sleep hay delay khác

Thông tin về vị trí của con trỏ chuột và control đang được con trỏ "bay lượn" phía

trên có thể được truy lại bằng hàm GUIGetCursorInfo. Không có sự kiện nào xảy

ra khi con trỏ chuột vượt qua control vì thế GUIGetCursorInfo phải được gọi để

lấy ID của control đó.

Page 99: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

GUIGetStyle

Truy lại các style của GUI

GUIGetStyle ( [ winhandle] )

Các tham số

winhandle [tùy chọn] handle của cửa sổ , được trả về từ hàm GUICreate... (mặc

định là GUI trước đó)

Giá trị trả về

Th.

Công : Trả về một mảng gồm hai phần tử chứa thông tin của style

$array[0] = Style

$array[1] = style mở rộng

Hỏng : Trả về 0

Chú ý

Cẩn thận về những thay đổi của style sau khi hàm GUISetState được gọi

GUIGetStyle

Truy lại các style của GUI

GUIGetStyle ( [ winhandle] )

Các tham số

winhandle [tùy chọn] handle của cửa sổ , được trả về từ hàm GUICreate... (mặc

định là GUI trước đó)

Giá trị trả về

Th. Trả về một mảng gồm hai phần tử chứa thông tin của style

Page 100: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Công :

$array[0] = Style

$array[1] = style mở rộng

Hỏng : Trả về 0

Chú ý

Cẩn thận về những thay đổi của style sau khi hàm GUISetState được gọi

GUIRegisterMsg

Đăng ký một hàm-do-người-dùng-định-nghĩa cho Windows Message ID

(WM_MSG) .

GUIRegisterMsg ( msgID, "function" )

Các tham số

msgID Định danh thông điệp windows (Windows Message ID , Xem

Appendix: Windows Message Codes).

function Tên của hàm sẽ được gọi khi thông điệp xuất hiện , sử dụng chuỗi

rỗng để bỏ qua , không đăng ký.

Giá trị trả về

Th.

Công : 1

Hỏng : 0

Chú ý

!!! Để hàm do bạn định nghĩa có thể làm việc được , cần gán cho nó tối đa 4 tham

số , ngược lại có thể nó sẽ không được gọi !!!

Page 101: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ
Page 102: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Ví dụ

Func MyUserFunction($hWndGUI, $MsgID, $WParam, $LParam)

...

EndFunc

hoặc

Func MyUserFunction($hWndGUI, $MsgID)

...

EndFunc

Khi người dùng gọi hàm thì 4 tham số sẽ mang những giá trị sau :

Vị trí Tham số Ý nghĩa

1 hWnd Handle của GUI mà thông điệp sẽ xuất hiện

2 Msg Định danh (ID) của thông điệp Windows

3 wParam Tham số thông điệp đầu tiên (giá trị hex)

4 lParam Tham số thông điệp thứ hai (giá trị hex)

Có thể đăng ký tối đa 256 hàm cho các thông điệp windows

Theo mặc định , sau khi hàm người dùng kết thúc thì trình điều khiển

thông điệp nội bộ của AutoIT sẽ tiếp tục làm việc. Điều đó sẽ không xảy ra

nếu như lệnh Return trong hàm của bạn trả về một giá trị hoặc return mà

không có giá trị theo sau.

!!! Nếu bạn muốn AutoIT chạy trình điều khiển nội bộ đối với một thông

điệp , thì hàm-người-dùng nên trả về biến $GUI_RUNDEFMSG (trong thư

viện GUIConstantsEx.au3) !!!

Page 103: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Ví dụ : khi bạn muốn hàm trở về sớm hơn so với tiến trình kết thúc của

nó và tiếp tục chạy trình điều khiển thông điệp nội bộ

Cẩn trọng : cản trở việc chạy một hàm-người-dùng đang thực thi một

thông điệp cửa sổ với một lệnh như MsgBox() thì có thể đưa đến một cách

chạy không mong đợi, hệ thống sẽ trở về nhanh như có thể !!!

Vài control có sử dụng các định danh thông điệp Windows đặc biệt , cho

nên việc đăng ký chúng không có hiệu quả. Ví dụ như : WM_CHAR,

WM_KEYDOWN, WM_KEYUP được dùng bởi control edit.

GUISetAccelerators

Cài đặt một bảng tăng tốc cho GUI . Bảng tăng tốc này sẽ cho phép người dùng sử

dụng các phím nóng

GUISetAccelerators ( accelerators [, winhandle] )

Các tham số

Accelerators Một mảng hai chiều để tổ chức bảng tăng tốc (xem chú ý)

winhandle [tùy chọn] handle của cửa sổ cần cài đặt , được trả về từ hàm

GUICreate (mặc định là gui trước đó).

Giá trị trả về

Th.

Công : Returns 1.

Hỏng : Returns 0.

Chú ý

Mảng này có chức năng là chứa phím nóng (hotkey) và ID của control cần gọi .

Mảng phải được định nghĩa như sau :

Dim $array[n][2] – trong đó n là tổng số phím tăng tốc cần thiết lập

Page 104: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

$array[0][0] = Hotkey (theo định dạng của hàm HotKeySet) đầu tiên

$array[0][1] = Control ID sẽ dùng cho hotkey đầu tiên, được trả về từ hàm

GUICtrlCreate...

$array[1][0] = Hotkey thứ hai

$array[1][1] = Control ID sẽ dùng cho hotkey thứ hai...

.........

$array[n][0] = Hotkey thứ n

$array[n][1] = Control ID sẽ dùng cho hotkey thứ n

Nếu tham số truyền không phải là mảng hai chiều thì sẽ không có trình tăng tốc

nào được tạo.

GUISetBkColor

Thiết lập màu nền cho cửa sổ

GUISetBkColor ( background [, winhandle] )

Các tham số

Background Màu nền cần gán

winhandle [tùy chọn] handle của cửa sổ mà bạn muốn gán màu (mặc định là cửa

sổ trước đó)

Giá trị trả về

Th.

Công : Returns 1.

Hỏng : Returns 0.

Chú ý

Page 105: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Những phiên bản trước của AutoIt (v3.0.102) sử dụng định dạng màu BGR ,

những phiên bản mới hơn sử dụng RGB theo mặc định. Tuy nhiên bạn có thể thay

đổi điều này bằng lựa chọn ColorMode.

GUISetFont

Thiết lập font chữ mặc định cho GUI

GUISetFont (size [, weight [, attribute [, fontname [, winhandle]]]] )

Các tham số

Size Kích cỡ của font (mặc định là 8.5)

weight [tùy chọn] trọng lượng của font (bình thường = 400)

attribute

[tùy chọn] muốn thiết lập định dạng cho ký tự , ta có in nghiêng : 2 ,

gạch chân : 4 , gạch ngang (strike) : 8 . Muốn kết hợp nhiều định dạng

ta cộng các giá trị với nhau. Ví dụ , muốn có chữ in nghiêng và gạch

chân , ta dùng 2+4.

fontname [tùy chọn] tên của font chữ sẽ dùng

winhandle [tùy chọn] handle của cửa sổ , được trả về từ hàm GUICreate (mặc

định là cửa sổ đã dùng trước đó)

Giá trị trả về

Th.

Công : Returns 1.

Hỏng : Returns 0.

Chú ý

Size có thể là một số thập phân , như 8.5

Page 106: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Vài control như Label , mặc định giá trị 8.5 có thể được thay bằng 9 theo

ghi nhận từ Windows Theme

Xem Appendix để có được một danh sách đầy đủ về các font của

windows

GUISetHelp

Cài đặt một file thi hành để gọi khi phím F1 được nhấn

GUISetHelp ( helpfile [, winhandle] )

Các tham số

Helpfile File sẽ chạy khi mà phím F1 được nhấn (lúc gui đã được kích hoạt)

Winhandle [tùy chọn] handle của cửa sổ , được trả về từ hàm GuiCreate(mặc định

là Gui trước đó)

Giá trị trả về

Th.

Công : Returns 1.

Hỏng : Returns 0.

GUISetOnEvent

Thiết lập một hàm cần gọi khi có một nút được nhấn (hàm đó do người viết mã

soạn)

GUISetOnEvent ( specialID, "function" [, winhandle] )

Các tham số

specialID Xem bảng ID bên dưới

Page 107: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

function Tên của hàm cần gọi (hàm này do người viết script soạn)

winhandle [tùy chọn] handle của cửa sổ cần thiết lập , được trả về từ hàm

GUICreate (mặc định là gui trước đó)

Giá trị trả về

Th.

Công : Returns 1.

Hỏng : Returns 0.

Chú ý

Các hàm OnEvent chỉ được gọi khi lựa chọn chế độ xử lý gui là

GUIOnEventMode (chế độ vòng lặp thông điệp sẽ không làm việc khi có lựa

chọn Opt("GuiOnEventMode", 1) ) . Đồng thời các nút minimize, maximize

và restore sẽ không đưa ra bất cứ phản ứng nào.

Nếu function là một chuỗi rỗng "" , thì không có phản ứng xảy ra khi

người dùng thao tác.

Bảng ID đặc biệt

Special Id Miêu tả

$GUI_EVENT_CLOSE Hộp thoại bị đóng (click nút close hoặc

menu hệ thống hoặc một nút do ta tạo)

$GUI_EVENT_MINIMIZE Hộp thoại bị thu nhỏ (minimize) bởi click

nút bấm từ thanh tiêu đề

$GUI_EVENT_RESTORE Hộp thoại được phục hồi do nhấn nút ở

thanh taskbar

Page 108: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

$GUI_EVENT_MAXIMIZE Hộp thoại được phóng lớn cực đại do

nhấn nút maximize

$GUI_EVENT_MOUSEMOVE Con trỏ chuột được di chuyển

$GUI_EVENT_PRIMARYDOWN Nút cơ bản của chuột được nhấn giữ

(thường là nút trái , nó tùy vào thiết lập

trong win)

$GUI_EVENT_PRIMARYUP Nút cơ bản của chuột được nhả ra

$GUI_EVENT_SECONDARYDOWN Nút thứ hai của chuột được nhấn giữ

(thường là nút phải)

$GUI_EVENT_SECONDARYUP Nút thức hai của chuột được nhả ra

$GUI_EVENT_RESIZED Cửa sổ được định lại kích thước (resize)

$GUI_EVENT_DROPPED Kết thúc của hành động

kéo&thả @GUI_DRAGID,

@GUI_DRAGFILE và @GUI_DROPID

sẽ được sử dụng để truy lại ID hoặc tập tin

cho các control liên quan.

GUISetState

Thay đổi trạng thái của cửa sổ GUI

GUISetState ( [flag [, winhandle]] )

Các tham số

flag

[tùy chọn]

@SW_SHOW = hiển thị cửa sổ đã ẩn trước đó (default)

@SW_HIDE = Ẩn cửa sổ

Page 109: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

@SW_MINIMIZE = Minimize (cực tiểu) cửa sổ

@SW_MAXIMIZE = Maximize (cực đại) cửa sổ

@SW_RESTORE = phục hồi lại cửa sổ đã bị cực tiểu

@SW_DISABLE = Vô hiệu cửa sổ

@SW_ENABLE = kích hoạt cửa sổ

@SW_LOCK = Khóa cửa sổ không cho vẽ lại

@SW_UNLOCK = Mở khóa cửa sổ , cho phép vẽ lại

winhandle [tùy chọn] handle của gui cần thiết lập trạng thái , trả về từ hàm

GUICreate (mặc định là GUI trước đó)

Giá trị trả về

Th.

Công : Returns 1.

Hỏng : Returns 0.

Chú ý

Khi cửa sổ được tạo ra , chúng sẽ bị ẩn . Cho nên muốn hiển thị cửa sổ ta

phải gọi hàm này với tham số @SW_SHOW

Chỉ một cửa sổ là có thể bị khóa với @SW_LOCK. Các @SW_LOCK

khác sẽ khóa cửa sổ khi có yêu cầu. @SW_UNLOCK bỏ qua "winhandle"

để mở khóa bất kỳ cửa sổ nào bị khóa..

GUISetStyle

Thay đổi style cho cửa sổ

GUISetStyle ( Style [,ExStyle [, winhandle]] )

Các tham số

Page 110: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Style

Định nghĩa style cho cửa sổ. Xem GUI Control Styles Appendix.

sử dụng -1 để bỏ qua , không thay đổi

exStyle

[tùy chọn] định nghĩa style mở rộng cho gui. Xem bảng Extended

Style Table bên dưới. -1 là mặc định

, không thay đổi style

winhandle [tùy chọn] handle của cửa sổ cần thiết lập , được trả về từ hàm

GUICreate (mặc định là Gui trước đó)

Giá trị trả về

Th.

Công : Returns 1.

Hỏng : Returns 0.

Chú ý

Sẽ không có sự kiểm tra nào trên giá trị của style , cũng không có sự tác động nào

đối với các control đã định nghĩa. Đó là trách nhiệm của người thiết kế để đảm bảo

tính tương thích.

GUICtrlCreateLabel

Label là chính là một text box, nó đảm nhiệm chức năng hiển thị nội dung của văn

bản lên trên GUI. Văn bản hiển thị trên đó là văn bản tĩnh, mà thông thường đối

với C++ hay vài ngôn ngữ khác người ta gọi là Static.

Để tạo một Label , ta có hàm với cú pháp sau :

GUICtrlCreateLabel ( "text", left, top [, width [, height [, style [, exStyle]]]] )

Các tham số

Page 111: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Text Văn bản sẽ hiển thị

left Khoảng cách canh từ lề trái của GUI (tọa độ x). Nếu sử dụng -1, thì lề

trái được tính theo GUICoordMode.

Top Khoảng cách canh từ lề trên của GUI (tọa độ y). Nếu sử dụng -1, thì lề

trái được tính theo GUICoordMode.

width [tùy chọn] độ rộng của control. Mặc định là độ rộng đã dùng trước đó

height [tùy chọn] chiều cao của control. Mặc định là chiều cao đã dùng trước

đó.

style [tùy chọn] định nghĩa style cho control. Xem trong GUI Control

Styles Appendix.

default ( -1) : none.

các style bắt buộc : $SS_NOTIFY, $SS_LEFT

exStyle [tùy chọn] định nghĩa style mở rộng cho control. Xem Extended Style

Table.

Giá trị trả về

Th.

Công : Trả về ID (định danh) của control Label vừa tạo

Hỏng : Trả về 0

Chú ý

Để thay đổi thông tin trên control, xem GUICtrlSet....

Để kết hợp style mặc định với các style khác,

gọi BitOr($GUI_SS_DEFAULT_LABEL, newstyle,...

Page 112: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ
Page 113: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Muốn dùng các giá trị nêu trên, phải gọi #include <StaticConstants.au3>

trong file script của bạn

Đưa về kích thước mặc định là $GUI_DOCKAUTO

Style mở rộng $GUI_WS_EX_PARENTDRAG cho phép bạn kéo những

cửa sổ bố-mẹ không có thanh tiêu đề (không có $WS_CAPTION trong

GUICreate)

Để thiết lập màu nền trong suốt, gọi GUICtrlSetBkColor(-1,

$GUI_BKCOLOR_TRANSPARENT).

Ví dụ

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()

Local $widthCell, $msg, $iOldOpt

; will create a dialog box that when displayed is centered

GUICreate("My GUI")

GUISetHelp("notepad") ; will run notepad if F1 is typed

$iOldOpt = Opt("GUICoordMode", 2)

$widthCell = 70

GUICtrlCreateLabel("Line 1 Cell 1", 10, 30, $widthCell) ; first cell 70 width

GUICtrlCreateLabel("Line 2 Cell 1", -1, 0) ; next line

GUICtrlCreateLabel("Line 3 Cell 2", 0, 0) ; next line and next cell

GUICtrlCreateLabel("Line 3 Cell 3", 0, -1) ; next cell same line

GUICtrlCreateLabel("Line 4 Cell 1", -3 * $widthCell, 0) ; next line Cell1

GUISetState() ; will display an empty dialog box

; Run the GUI until the dialog is closed

Do

Page 114: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

$msg = GUIGetMsg()

Until $msg = $GUI_EVENT_CLOSE

$iOldOpt = Opt("GUICoordMode", $iOldOpt)

EndFunc ;==>Example

GUICtrlCreatePic

Hàm này sẽ tạo ra một control cho phép nạp và hiển thị hình ảnh (picture) trên

GUI.

GUICtrlCreatePic ( filename, left, top [, width [, height [, style [, exStyle]]]] )

Các tham số

Filename Đường dẫn và tên đầy đủ file ảnh cần load. Hỗ trợ ảnh BMP, JPG và

GIF (không có hình động)

left Khoảng cách canh từ lề trái của GUI (tọa độ x). Nếu sử dụng -1, thì lề

trái được tính theo GUICoordMode.

Top Khoảng cách canh từ lề trên của GUI (tọa độ y). Nếu sử dụng -1, thì lề

trái được tính theo GUICoordMode.

width [tùy chọn] độ rộng của control. Mặc định là độ rộng đã dùng trước đó

height [tùy chọn] chiều cao của control. Mặc định là chiều cao đã dùng trước

đó.

Style

[Tùy chọn] Định nghĩa style cho control. Xem GUI Control Styles

Appendix.

default (-1) : $SS_NOTIFY

style bắt buộc : $SS_BITMAP

exStyle [tùy chọn] Định nghĩa style mở rộng. Xem Extended Style Table.

Page 115: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Giá trị trả về

Th.

Công : Trả về ID của control picture vừa được tạo

Hỏng : Trả về 0 nếu ảnh không tạo được ảnh

Chú ý

Để thiết lập hoặc thay đổi thông tin picture, xem hàm GUICtrlSet....

Để cập nhật ảnh sau khi hộp thoại đã được hiển thị , sử dụng hàm

GUICtrlSetImage

Nếu bạn muốn ảnh hiển thị với kích thước gốc của nó , gán width = heigh

= 0

Nếu bạn muốn có một ảnh trong suốt , bạn cần tạo GUI với style mở

rộng $WS_LAYERED. Điểm ảnh left-top (góc trái trên) sẽ được dùng làm

màu trong suốt. Khi có nhiều ảnh được tạo , thì ảnh cuối cùng được định

nghĩa màu trong suốt. Xem example 2.

.Để kết hợp style mặc định với style khác , sử dụng

BitOr($GUI_SS_DEFAULT_PIC, newstyle,...).

Để sử dụng được các giá trị nêu trên , gọi thư viện #include

<StaticConstants.au3>

Đưa về kích thước mặc định : $GUI_DOCKSIZE.

Nếu một ảnh được thiết lập làm ảnh trong suốt , các control khác sẽ bị

phủ lấp , điều quan trọng là phải vô hiệu control pic và tạo nó sau khi bạn đã

tạo các control khác : GUICtrlSetState(-1, $GUI_DISABLE). Chỉ điều này

thôi thì chưa đủ cho control Tab và ListView vì chúng sẽ hoạt động hơi khác

thường. Trong trường hợp này bạn cần tạo ảnh với style

Page 116: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

$WS_CLIPSIBLINGS , GuiCtrlSetState(-1,$GUI_ONTOP) là cần thiết cho

control Tab và ListView.

Style mở rộng $GUI_WS_EX_PARENTDRAG cho phép bạn nắm và

kéo những cửa sổ con không có thanh tiêu đề.

Nền thì luôn được làm cho trong suốt. GUICtrlSetBkColor( ) thì không

có tác dụng đối với control picture.

PNG có thể được dùng với GDI+. Xem example 3.

Ví dụ

#include <GUIConstantsEx.au3>

#include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)

Global $gui, $guiPos, $pic, $picPos

Example1()

Example2()

;----- example 1 ----

Func Example1()

Local $n, $msg

GUICreate("My GUI picture", 350, 300, -1, -1, $WS_SIZEBOX +

$WS_SYSMENU) ; will create a dialog box that when displayed is centered

GUISetBkColor(0xE0FFFF)

$n = GUICtrlCreatePic(@SystemDir & "\oobe\images\mslogo.jpg", 50, 50,

200, 50)

GUISetState()

; Run the GUI until the dialog is closed

While 1

$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop

Page 117: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

WEnd

;~ GUISetState ()

; resize the control

$n = GUICtrlSetPos($n, 50, 50, 200, 100)

; Run the GUI until the dialog is closed

While 1

$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop

WEnd

GUIDelete()

EndFunc ;==>Example1

;----- example 2

Func Example2()

Local $msg

$gui = GUICreate("test transparentpic", 200, 100,-1 )

$pic = GUICreate("", 68, 71, 10, 10, $WS_POPUP,

BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $gui)

GUICtrlCreatePic(@SystemDir & "\oobe\images\merlin.gif", 0, 0, 0, 0,-

1,$GUI_WS_EX_PARENTDRAG )

GUISetState(@SW_SHOW, $gui)

GUISetState(@SW_SHOW, $pic)

HotKeySet("{ESC}", "main")

HotKeySet("{LEFT}", "left")

HotKeySet("{RIGHT}", "right")

HotKeySet("{DOWN}", "down")

HotKeySet("{UP}", "up")

$picPos = WinGetPos($pic)

Page 118: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ
Page 119: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

$guiPos = WinGetPos($gui)

Do

$msg = GUIGetMsg()

Until $msg = $GUI_EVENT_CLOSE

EndFunc ;==>Example2

Func main()

$guiPos = WinGetPos($gui)

WinMove($gui, "", $guiPos[0] + 10, $guiPos[1] + 10)

EndFunc ;==>main

Func left()

$picPos = WinGetPos($pic)

WinMove($pic, "", $picPos[0] - 10, $picPos[1])

EndFunc ;==>left

Func right()

$picPos = WinGetPos($pic)

WinMove($pic, "", $picPos[0] + 10, $picPos[1])

EndFunc ;==>right

Func down()

$picPos = WinGetPos($pic)

WinMove($pic, "", $picPos[0], $picPos[1] + 10)

EndFunc ;==>down

Func up()

$picPos = WinGetPos($pic)

WinMove($pic, "", $picPos[0], $picPos[1] - 10)

EndFunc ;==>up

;----- example 3 PNG work araund by Zedna

#include <GUIConstantsEx.au3>

Page 120: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

#include <WindowsConstants.au3>

#include <GDIPlus.au3>

#Include <WinAPI.au3>

Global $hGUI, $hImage, $hGraphic, $hImage1

; Create GUI

$hGUI = GUICreate("Show PNG", 350, 301)

; Load PNG image

_GDIPlus_StartUp()

$hImage =

_GDIPlus_ImageLoadFromFile("E:\WINDOWS\system32\oobe\images\tha

nks8.png")

$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

GUIRegisterMsg($WM_PAINT, "MY_WM_PAINT")

GUISetState()

; Loop until user exits

do

until GUIGetMsg() = $GUI_EVENT_CLOSE

; Clean up resources

_GDIPlus_GraphicsDispose($hGraphic)

_GDIPlus_ImageDispose($hImage)

_GDIPlus_ShutDown()

; Draw PNG image

Func MY_WM_PAINT($hWnd, $Msg, $wParam, $lParam)

_WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_UPDATENOW)

_GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 0, 0)

_WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_VALIDATE)

Return $GUI_RUNDEFMSG

Page 121: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

EndFunc

GUICtrlCreateButton Tạo một nút bấm cho GUI

GUICtrlCreateButton ( "text", left, top [, width [, height [, style [, exStyle]]]] ) Các tham số Text Văn bản sẽ hiện trên nút bấm left Khoảng cách canh từ lề trái của GUI (tọa độ x). Nếu sử dụng -1, thì lề

trái được tính theo GUICoordMode. Top Khoảng cách canh từ lề trên của GUI (tọa độ y). Nếu sử dụng -1, thì lề

trái được tính theo GUICoordMode. width [tùy chọn] độ rộng của control. Mặc định là độ rộng đã dùng trước đó height [tùy chọn] chiều cao của control. Mặc định là chiều cao đã dùng trước

đó.

style

[Tùy chọn] Định nghĩa style cho control. Xem GUI Control Styles Appendix. default ( -1) : none. style bắt buộc : $WS_TABSTOP

exStyle [tùy chọn] Định nghĩa style mở rộng. Xem Extended Style Table. Giá trị trả về Th. Công : Trả về ID của control Button vừa tạo

Hỏng : Trả về 0 Chú ý

Để thay đổi thông tin của button, sử dụng GUICtrlSet....

Một nút bấm có thể hiển thị kèm theo một icon hoặc ảnh bằng cách sử

dụng style $BS_ICON hoặc $BS_BITMAP . Gọi GUICtrlSetImage để chỉ

định ảnh mà bạn muốn dùng.

Để kết hợp style mở rộng và các style khác, gọi

BitOr($GUI_SS_DEFAULT_BUTTON, newstyle,...).

Page 122: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Các giá trị bên trên muốn dùng được, cần gọi đến thư viện #include

<ButtonConstants.au3>

Đưa về kích thước mặc định : $GUI_DOCKSIZE

Ví dụ #include<GUIConstantsEx.au3> Opt('MustDeclareVars',1) Example() Func Example() Local$Button_1,$Button_2,$msg GUICreate("My GUI Button"); will create a dialog box that when displayed is centered Opt("GUICoordMode",2) $Button_1=GUICtrlCreateButton("Run Notepad",10,30,100) $Button_2=GUICtrlCreateButton("Button Test",0,-1) GUISetState() ; will display an dialog box with 2 button ; Run the GUI until the dialog is closed While1 $msg=GUIGetMsg() Select Case$msg=$GUI_EVENT_CLOSE ExitLoop Case$msg=$Button_1 Run('Notepad.exe') ; Will Run/Open Notepad Case$msg=$Button_2 MsgBox(0,'Testing','Button 2 was pressed') ; Will demonstrate Button 2 being pressed EndSelect WEnd EndFunc ;==>Example

GUICtrlCreateInput

Page 123: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Input chính là một textbox cho phép người dùng nhập văn bản vào . Văn bản đó có

thể được phân loại, kiểm tra xem có phù hợp với định dạng hay không. Định dạng

đó có thể là , chỉ cho phép nhập số không được nhập ký tự chẳng hạn. Hình thức

input mà bạn thường gặp nhất là ở các hộp thoại đăng nhập, yêu cầu user và

password.

GUICtrlCreateInput ( "text", left, top [, width [, height [, style [, exStyle]]]] )

Các tham số

text The text of the control.

left Khoảng cách canh từ lề trái của GUI (tọa độ x). Nếu sử dụng -1, thì lề trái được tính theo GUICoordMode.

Top Khoảng cách canh từ lề trên của GUI (tọa độ y). Nếu sử dụng -1, thì lề trái được tính theo GUICoordMode.

width [tùy chọn] độ rộng của control. Mặc định là độ rộng đã dùng trước đó height [tùy chọn] chiều cao của control. Mặc định là chiều cao đã dùng trước

đó.

style

[tùy chọn] Định nghĩa style cho input. Xem GUI Control Styles

Appendix.

default ( -1) : $ES_LEFT, $ES_AUTOHSCROLL

style bắt buộc : $WS_TABSTOP only if no $ES_READONLY.

$ES_MULTILINE is always reset.

exStyle [tùy chọn] định nghĩa style mở rộng. Xem Extended Style Table.

Giá trị trả về

Th.

Công : Trả về ID của control Input vừa tạo

Page 124: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Hỏng : Trả về 0

Chú ý

Để đọc nội dung của input, xem hàm GUICtrlRead.

Để gán thông tin cho input , xem hàm GUICtrlSet....

Dùng input như một hộp nhập password thì dùng style

$ES_PASSWORD (mỗi ký tự nhập vào sẽ được thay bằng dấu * )

Nếu bạn muốn kéo thả một filename vào input, sử dụng style mở

rộng WS_EX_ACCEPTFILES trong hàm tạo cửa sổ GUICreate() và thiết

lập trạng thái $GUI_DROPACCEPTED.

Nếu có nhiều tập tin được kéo thả vào control, tên của các tập tin được

ngăn cách với nhau bằng dấu gạch đứng " | ". Dùng GuiCtrlRead để lấy văn

bản này.

Thư viện chứa các giá trị nêu trên #include <EditConstants.au3>

Đưa về kích thước mặc định $GUI_DOCKHEIGHT.

Ví dụ

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()

Local $file, $btn, $msg

GUICreate(" My GUI input acceptfile", 320, 120, @DesktopWidth / 2 -

Page 125: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

160, @DesktopHeight / 2 - 45, -1, 0x00000018); WS_EX_ACCEPTFILES

$file = GUICtrlCreateInput("", 10, 5, 300, 20)

GUICtrlSetState(-1, $GUI_DROPACCEPTED)

GUICtrlCreateInput("", 10, 35, 300, 20) ; will not accept drag&drop

files

$btn = GUICtrlCreateButton("Ok", 40, 75, 60, 20)

GUISetState()

$msg = 0

While $msg <> $GUI_EVENT_CLOSE

$msg = GUIGetMsg()

Select

Case $msg = $btn

ExitLoop

EndSelect

WEnd

MsgBox(4096, "drag drop file", GUICtrlRead($file))

EndFunc ;==>Example

GUICtrlCreateEdit

Edit chính là hộp soạn thảo văn bản tương tự như input. Nhưng input thì chỉ có một

dòng, còn edit thì có nhiều dòng và kích thước lớn. Vùng soạn thảo văn bản của

notepad chính là một Edit. Muốn tạo một Edit , bạn chỉ cần gọi và thiết lập đúng

hàm sau :

GUICtrlCreateEdit ( "text", left, top [, width [, height [, style [, exStyle]]]] )

Các tham số

Page 126: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

text Văn bản hiển thị trên edit

left Khoảng cách canh từ lề trái của GUI (tọa độ x). Nếu sử dụng -1, thì lề

trái được tính theo GUICoordMode.

Top Khoảng cách canh từ lề trên của GUI (tọa độ y). Nếu sử dụng -1, thì lề

trái được tính theo GUICoordMode.

width [tùy chọn] độ rộng của control. Mặc định là độ rộng đã dùng trước đó

height [tùy chọn] chiều cao của control. Mặc định là chiều cao đã dùng trước

đó.

style

[Tùy chọn] Định nghĩa style cho control. Xem GUI Control Styles

Appendix.

default ( -1) : $ES_WANTRETURN, $WS_VSCROLL,

$WS_HSCROLL, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL

style bắt buộc : $ES_MULTILINE, $WS_TABSTOP only if not

$ES_READONLY

exStyle [tùy chọn] Định nghĩa style mở rộng. Xem Extended Style Table.

Giá trị trả về

Th.

Công : Trả về ID của Edit vừa được tạo

Hỏng : Trả về 0

Chú ý

Để đọc nội dung của edit, xem hàm GUICtrlRead.

Page 127: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Để gán thông tin cho edit , xem hàm GUICtrlSet....

Nếu bạn muốn kéo thả một filename vào edit, sử dụng style mở

rộng WS_EX_ACCEPTFILES trong hàm tạo cửa sổ GUICreate() và thiết

lập trạng thái $GUI_DROPACCEPTED.

Nếu có nhiều file được chọn để kéo thả vào Edit thì tên của mỗi file được

ghi trên một dòng riêng biệt

Thư viện chứa các giá trị được nêu ở trên #include <EditConstants.au3>

Đưa về kích thước mặc định $GUI_DOCKAUTO

Việc tạo một RichEdit thì quá phức tạp vì thế không đề cập ở đây. Nó

phải sử dụng đến GuiCtrlCreateObj. Bạn muốn tìm hiểu thì xem ở ví dụ 2

trong file help của AutoIt.

Ví dụ

#include <GUIConstantsEx.au3>

#include <WindowsConstants.au3>

#include <EditConstants.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()

Local $myedit, $msg

GUICreate("My GUI edit") ; will create a dialog box that when displayed is

centered

$myedit = GUICtrlCreateEdit("First line" & @CRLF, 20, 32,350, 200,

$ES_AUTOVSCROLL + $WS_VSCROLL)

GUISetState()

Send("{END}")

; will be append dont' forget 3rd parameter

GUICtrlSetData($myedit, "Second line", 1)

Page 128: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

; Run the GUI until the dialog is closed

While 1

$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop

WEnd

GUIDelete()

EndFunc ;==>Example

GUICtrlCreateRadio

Radio là một dạng nút-lựa-chọn gần giống như checkbox , nhưng khác với

checkbox ở hai điểm. Thứ nhất là các radio thường tập hợp thành một nhóm với

nhau. Thứ hai là trong nhóm đó bạn chỉ được phép chọn một (giống như trắc

nghiệm vậy). Hàm sau cho phép bạn tạo mỗi lần một nút radio.

GUICtrlCreateRadio ( "text", left, top [, width [, height [, style [, exStyle]]]]

)

Các tham số

Text Văn bản hiện thị cạnh bên miêu tả nội dung của radio (không phải

tooltip)

left Khoảng cách canh từ lề trái của GUI (tọa độ x). Nếu sử dụng -1, thì lề

trái được tính theo GUICoordMode.

Top Khoảng cách canh từ lề trên của GUI (tọa độ y). Nếu sử dụng -1, thì lề

trái được tính theo GUICoordMode.

width [tùy chọn] độ rộng của control. Mặc định là độ rộng đã dùng trước đó

height [tùy chọn] chiều cao của control. Mặc định là chiều cao đã dùng trước

đó.

style [Tùy chọn] Định nghĩa style cho control. Xem GUI Control Styles

Page 129: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Appendix.

default ( -1) : none.

style bắt buộc : $BS_AUTORADIOBUTTON và $WS_TABSTOP

nếu là nút radio đầu tiên trong nhóm.

Page 130: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

exStyle [tùy chọn] Định nghĩa style mở rộng. Xem Extended Style Table.

Giá trị trả về

Th.

Công : Trả về ID (mới) của nút radio vừa được tạo

Hỏng : Trả về 0

Chú ý

Để đọc giá trị của radio (có được chọn hay không), xem hàm

GUICtrlRead.

Để thiết lập thông tin cho radio, xem hàm GUICtrlSet....

Để kết hợp style mặc định với style khác,

dùng BitOr($GUI_SS_DEFAULT_RADIO, newstyle,...).

Để sử dụng được các giá trị nêu ở trên, cần gọi thư viện #include

<ButtonConstants.au3>

Đưa về kích thước mặc định $GUI_DOCKHEIGHT.

Ví dụ

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()

Local $radio1, $radio2, $msg

GUICreate("My GUI radio") ; will create a dialog box that when displayed

is centered

$radio1 = GUICtrlCreateRadio("Radio 1", 10, 10, 120, 20)

$radio2 = GUICtrlCreateRadio("Radio 2", 10, 40, 120, 20)

Page 131: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

GUICtrlSetState($radio2, $GUI_CHECKED)

GUISetState() ; will display an dialog box with 1 checkbox

; Run the GUI until the dialog is closed

While 1

$msg = GUIGetMsg()

Select

Case $msg = $GUI_EVENT_CLOSE

ExitLoop

Case $msg = $radio1 And BitAND(GUICtrlRead($radio1),

$GUI_CHECKED) = $GUI_CHECKED

MsgBox(64, 'Info:', 'You clicked the Radio 1 and it is Checked.')

Case $msg = $radio2 And BitAND(GUICtrlRead($radio2),

$GUI_CHECKED) = $GUI_CHECKED

MsgBox(64, 'Info:', 'You clicked on Radio 2 and it is Checked.')

EndSelect

WEnd

EndFunc ;==>Example

GUICtrlCreateList

Hàm này sẽ giúp bạn tạo ra một cái danh sách để chứa thông tin. Danh sách là một

dạng dữ liệu rất hay gặp trong đời thường và trên máy tính (ở các chương trình

nghe nhạc và quản lý). Tuy nhiên, ở đây AutoIt chỉ hỗ trợ bạn tạo ra một danh sách

với các tính năng đơn giản, thông dụng. Danh sách này chỉ có một cột nhưng lại có

nhiều dòng. Nếu bạn cần một danh sách có nhiều cột và nhiều dòng thì hãy dùng

ListView , ở đây tôi không đề cập đến phần này. Cú pháp cho bạn tạo một Listbox

như sau :

GUICtrlCreateList ( "text", left, top [, width [, height [, style [, exStyle]]]] )

Các tham số

Page 132: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Text Văn bản sẽ hiển thị trong List box

left Khoảng cách canh từ lề trái của GUI (tọa độ x). Nếu sử dụng -1, thì lề

trái được tính theo GUICoordMode.

Top Khoảng cách canh từ lề trên của GUI (tọa độ y). Nếu sử dụng -1, thì lề

trái được tính theo GUICoordMode.

width [tùy chọn] độ rộng của control. Mặc định là độ rộng đã dùng trước đó

height [tùy chọn] chiều cao của control. Mặc định là chiều cao đã dùng trước

đó.

style

[Tùy chọn] Định nghĩa style cho control. Xem GUI Control Styles

Appendix.

default ( -1) : $LBS_SORT, $WS_BORDER, $WS_VSCROLL

style bắt buộc : $WS_TABSTOP, $LBS_NOTIFY

exStyle [tùy chọn] Định nghĩa style mở rộng. Xem Extended Style Table.

Giá trị trả về

Th.

Công : Trả về ID của listbox vừa tạo

Hỏng : Trả về 0

Chú ý

Để đọc các giá trị của listbox , xem hàm GUICtrlRead

Để thiết lập hoặc thay đổi thông tin , xem hàm GUICtrlSet....

Page 133: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Nhiều mục-nhập (entry) khác nhau trong danh sách có thể được chọn ,

được thiết lập với GUICtrlSetData

Để giới hạn mức cuộn (srolling) theo chiều ngang , dùng hàm

GUICtrlSetLimit

Để kết hợp style mặc định với các style khác ,

gọi BitOr($GUI_SS_DEFAULT_LIST, newstyle,...).

Để sử dụng được các giá trị nêu trên , cần gọi thư viện : #include

<ListBoxConstants.au3>

Đưa về kích thước mặc định (size và vị trí) : $GUI_DOCKAUTO

Ví dụ

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()

Local $MESSAGE = "The following buttons have been clicked"

Local $add, $clear, $mylist, $close, $msg

GUICreate("My GUI list") ; will create a dialog box that when displayed is

centered

$add = GUICtrlCreateButton("Add", 64, 32, 75, 25)

$clear = GUICtrlCreateButton("Clear", 64, 72, 75, 25)

$mylist = GUICtrlCreateList("buttons that have been clicked", 176, 32, 121,

97)

GUICtrlSetLimit(-1, 200) ; to limit horizontal scrolling

GUICtrlSetData(-1, $MESSAGE)

$close = GUICtrlCreateButton("my closing button", 64, 160, 175, 25)

GUISetState()

$msg = 0

Page 134: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

While $msg <> $GUI_EVENT_CLOSE

$msg = GUIGetMsg()

Select

Case $msg = $add

GUICtrlSetData($mylist, "You clicked button No1|")

Case $msg = $clear

GUICtrlSetData($mylist, "")

Case $msg = $close

MsgBox(0, "", "the closing button has been clicked", 2)

Exit

EndSelect

WEnd

EndFunc ;==>Example

GUICtrlCreateListView

ListView cũng chính là một danh sách (Listbox) nhưng nó có nhiều dòng và nhiều

cột , tạo thành một ma trận. Listview mà bạn thường thấy là trong Windows

Explorer , khi bạn duyệt file với chế độ View là Detail.

GUICtrlCreateListView ( "text", left, top [, width [, height [, style [,

exStyle]]]] )

Các tham số

text

Văn bản này sẽ là tiêu đề của các cột trong listview. Mỗi tiêu đề sẽ

được ngăn cách với ký tự được chỉ định

trong Opt("GUIDataSeparatorChar").

Page 135: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

left Khoảng cách canh từ lề trái của GUI (tọa độ x). Nếu sử dụng -1, thì lề trái

được tính theo GUICoordMode.

Top Khoảng cách canh từ lề trên của GUI (tọa độ y). Nếu sử dụng -1, thì lề trái

được tính theo GUICoordMode.

width [tùy chọn] độ rộng của control. Mặc định là độ rộng đã dùng trước đó

height [tùy chọn] chiều cao của control. Mặc định là chiều cao đã dùng trước đó.

style

[tùy chọn] định nghĩa style cho control. Xem GUI Control Styles

Appendix.

default (-1) : $LVS_SHOWSELALWAYS, $LVS_SINGLESEL

style bắt buộc : $LVS_REPORT

exStyle [tùy chọn] định nghĩa style mở rộng cho control. Xem Extended Style

Table hoặc ListView Extended Style Table.

Giá trị trả về

Th.

Công : Trả về ID của listview vừa được tạo

Hỏng : Trả về 0

Chú ý

Để thêm các mục vào Listview , sử dụng hàm

GUICtrlCreateListViewItem

ListView sẽ xuất hiện mặc định như trong windows explorer với view là

Detail (LVS_REPORT là bắt buộc).

Bạn có thể khởi tạo kích thước cho một cột bằng cách nối thêm các khoảng

Page 136: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

trắng vào tiêu đề của cột. Cột có thể được mở rộng theo chiều dài của mục-

(item)-được-thêm-vào bởi GUICtrlCreateListViewItem. Kích thước của một

cột sẽ lên đến 25 ký tự. Nhưng sẽ không có một sự resize được diễn ra khi

bạn cập nhật nội dung ListView bằng GuiCtrlSetData.

Để tạo một ListView với icon, icon nhỏ hoặc chỉ là một kiểu List , sau

khi tạo bạn gọi hàm GUICtrlSetStyle với các style : $LVS_ICON,

$LVS_SMALLICON hoặc $LVS_LIST.

Chức năng sắp xếp các mục trong ListView bằng cách nhấp vào tiêu đề

của cột (như trong Explorer) thì không có tác dụng.

Khi bạn chọn một mục trong ListView, bạn muốn toàn bộ dòng đó được

phát sáng thay vì chỉ có ở một cột thì hãy gọi style mở

rộng $LVS_EX_FULLROWSELECT.

Để kết hợp style mặc định với style khác , bạn

gọi BitOr($GUI_SS_DEFAULT_LISTVIEW, newstyle,...).

Thư viện cần thiết cho các tham số nêu ở trên là : #include

<ListViewConstants.au3>

$GUI_BKCOLOR_LV_ALTERNATE là một cờ đặc biệt , có thể dùng

với Listview để làm cho màu nền giữa các dòng có thể xen kẽ nhau.

- Dòng chẵn sẽ lấy màu được thiết lập bởi hàm GUICtrlSetBkColor của

control ListView

- Dòng lẻ sẽ lấy màu được thiết lập bởi hàm GUICtrlSetBkColor của

control ListViewItem

Ví dụ

#include <GUIConstantsEx.au3>

#include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)

Example()

Page 137: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Func Example()

Local $listview, $button, $item1, $item2, $item3, $input1, $msg

GUICreate("listview items", 220, 250, 100, 200, -1,

$WS_EX_ACCEPTFILES)

GUISetBkColor(0x00E0FFFF) ; will change background color

$listview = GUICtrlCreateListView("col1 |col2|col3 ", 10, 10, 200,

150);,$LVS_SORTDESCENDING)

$button = GUICtrlCreateButton("Value?", 75, 170, 70, 20)

$item1 = GUICtrlCreateListViewItem("item2|col22|col23", $listview)

$item2 = GUICtrlCreateListViewItem("item1|col12|col13", $listview)

$item3 = GUICtrlCreateListViewItem("item3|col32|col33", $listview)

$input1 = GUICtrlCreateInput("", 20, 200, 150)

GUICtrlSetState(-1, $GUI_DROPACCEPTED) ; to allow drag and

dropping

GUISetState()

GUICtrlSetData($item2, "ITEM1")

GUICtrlSetData($item3, "||COL33")

GUICtrlDelete($item1)

Do

$msg = GUIGetMsg()

Select

Case $msg = $button

MsgBox(0, "listview item", GUICtrlRead(GUICtrlRead($listview)), 2)

Case $msg = $listview

MsgBox(0, "listview", "clicked=" & GUICtrlGetState($listview), 2)

EndSelect

Until $msg = $GUI_EVENT_CLOSE

Page 138: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

EndFunc ;==>Example

GUICtrlCreateListViewItem

Tạo ra một mục (item) mới để thêm vào trong ListView.

GUICtrlCreateListViewItem ( "text", listviewID )

Các tham số

Text Văn bản của các mục (item) phụ, mỗi mục được ngăn cách với

Opt("GUIDataSeparatorChar").

listviewID Định danh (ID) của control ListView mà bạn muốn thêm item vào

Giá trị trả về

Th.

Công : Định danh (ID) của mục vừa được tạo

Failure: Trả về 0

Chú ý

Hàm này tạo ra những mục (item) Listview đặc biệt, chúng có thể được

chọn, có tính năng như những control bình thường và có thể được thiết lập

với GUICtrlSetData.

Các item này có thể được xóa bỏ như các control khác khi gọi hàm

GUICtrlDelete

Những mục trong Listview có thể được kéo thả vào trong một control

Edit hay Input , khi được thiết lập trạng thái (state)

$GUI_DROPACCEPTED.

Xem hàm GUICtrlCreateListView về việc resize lại kích thước của các

cột.

Page 139: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

$GUI_BKCOLOR_LV_ALTERNATE là một cờ đặc biệt , có thể dùng

với Listview để làm cho màu nền giữa các dòng có thể xen kẽ nhau.

- Dòng chẵn sẽ lấy màu được thiết lập bởi hàm GUICtrlSetBkColor của

control ListView

- Dòng lẻ sẽ lấy màu được thiết lập bởi hàm GUICtrlSetBkColor của

control ListViewItem

Ví dụ

#include <GUIConstantsEx.au3>

#include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()

Local $listview, $button, $item1, $item2, $item3, $input1, $msg

GUICreate("listview items", 220, 250, 100, 200, -1,

$WS_EX_ACCEPTFILES)

GUISetBkColor(0x00E0FFFF) ; will change background color

$listview = GUICtrlCreateListView("col1 |col2|col3 ", 10, 10, 200,

150);,$LVS_SORTDESCENDING)

$button = GUICtrlCreateButton("Value?", 75, 170, 70, 20)

$item1 = GUICtrlCreateListViewItem("item2|col22|col23", $listview)

$item2 = GUICtrlCreateListViewItem("............item1|col12|col13",

$listview)

$item3 = GUICtrlCreateListViewItem("item3|col32|col33", $listview)

$input1 = GUICtrlCreateInput("", 20, 200, 150)

GUICtrlSetState(-1, $GUI_DROPACCEPTED) ; to allow drag and

dropping

GUISetState()

Page 140: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ
Page 141: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

GUICtrlSetData($item2, "|ITEM1")

GUICtrlSetData($item3, "||COL33")

GUICtrlDelete($item1)

Do

$msg = GUIGetMsg()

Select

Case $msg = $button

MsgBox(0, "listview item", GUICtrlRead(GUICtrlRead($listview)), 2)

Case $msg = $listview

MsgBox(0, "listview", "clicked=" & GUICtrlGetState($listview), 2)

EndSelect

Until $msg = $GUI_EVENT_CLOSE

EndFunc ;==>Example

GUICtrlDelete

Xóa bỏ một control

GUICtrlDelete ( controlID )

Các tham số

controlID Định danh (ID) của control . Định danh này được trả về bởi hàm

GUICtrlCreate...

Giá trị trả về

Th.

Công : Trả về 1

Hỏng : Trả về 0.

Chú ý

Page 142: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Đối với việc xóa ContextMenu (menu ngữ cảnh) , xem remark của

GUICtrlCreateContextMenu.

GUICtrlGetState

Lấy trạng thái hiện hành của control

GUICtrlGetState ( [controlID] )

Các tham số

controlID [tùy chọn] định danh của control được trả về từ hàm GUICtrlCreate....

Giá trị trả về

Th.

Công : Trả về trạng thái. Xem hàm GUICtrlSetState để biết giá trị

Hỏng : Trả về -1 nếu control không được định nghĩa

Chú ý

Khác với hàm GUICtrlRead , hàm này chỉ trả về trạng thái của control : kích

hoạt/vô hiệu/ẩn/hiện/cho phép kéo thả

Ngoại lệ : với ListView nó trả về tổng số cột đã click

GUICtrlRead

Đọc trạng thái hoặc dữ liệu của control

GUICtrlRead ( controlID [, advanced] )

Các tham số

controlID Định danh của control , được trả về từ hàm GUICtrlCreate...

advanced

[tùy chọn] trả về thông tin mở rộng của control

0 = (Default) trả về một giá trị là trạng thái hoặc dữ liệu của control

1 = trả về thông tin mở rộng (xem chú ý)

Page 143: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Giá trị trả về

Th.

Công : Trả về giá trị phụ thuộc vào loại control

Hỏng : Trả về 0

Loại Giá trị

Checkbox,

Radio Trạng thái của nút bấm (xem bảng trạng thái State trong file help)

Combo, List Giá trị được chọn

Input, Edit Văn bản đã nhập vào

Button Văn bản đang hiển thị

Date Ngày được chọn

Progress Phần trăm hiện hành

Slider Giá trị hiện hành

Tab Một số hoặc ID của control tabitem đã chọn , phụ thuộc vào giá

trị tham số Advanced

Menu,

MenuItem Trạng thái của menu/item. Xem State table

TreeView ID của control TreeViewItem được chọn

TreeViewItem Trạng thái của TreeViewItem

ListView Định danh (ID) của ListViewItem đã chọn. 0 có nghĩa là không

Page 144: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

có mục nào được chọn

Dummy Giá trị được gán bởi GUICtrlSendToDummy

hoặc GUICtrlSetData

Chú ý

Trong chế độ advanced , giá trị trả về chứa dữ liệu bổ sung của control (xem bảng

bên dưới)

ghi chú : không phải tất cả các control đều có sẵn thông tin bổ sung !

Loại Giá trị bổ sung

Checkbox,

Radio Văn bản của control

Menu,

MenuItem Văn bản của control

TreeView Văn bản của TreeViewItem đang được chọn

TreeViewItem Văn bản của treeviewitem

ListViewItem

Trạng thái của ListViewItem nếu style mở rộng

$LVS_EX_CHECKBOXES sử dụng trong chế độ advanced .

Xem state table

Tab ID của control tabitem được chọn

Với checkbox , radio vài trạng thái có thể trả về $GUI_FOCUS và

$GUI_CHECKED,. Ví dụ :

BitAnd(GUICtrlRead($Item),$GUI_CHECKED) để kiểm tra xem control

có được đánh-dấu-chọn (check).

Page 145: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Đối với các mục trong Listview , vài trạng thái có thể được trả về như

$GUI_CHECKED và $GUI_UNCHECKED (chỉ đối với control listview

có style mở rộng LVS_EX_CHECKBOXES – trả về dạng Advanced) .

ví dụ : BitAnd(GUICtrlRead($Item),$GUI_CHECKED) để kiểm tra xem

item có được đánh dấu hay không.

Đối với các mục trong TreeView , vài trạng thái có thể được trả về

như $GUI_FOCUS, $GUI_EXPAND và $GUI_CHECKED,

$GUI_UNCHECKED (chỉ đối với treeview controls có style

TVS_CHECKBOXES). Ví dụ :

BitAnd(GUICtrlRead($Item),$GUI_CHECKED) để kiểm tra xem control

có được check

GUICtrlRegisterListViewSort

Đăng ký một hàm đã được định nghĩa dùng vào việc sắp xếp các mục trong

ListView. Đây là hàm nội bộ , sẽ được gọi tự động khi có yêu cầu sắp xếp.

GUICtrlRegisterListViewSort ( controlID, "function" )

Các tham số

controlID ID của ListView

function Tên của hàm cần gọi để thực hiện sắp xếp

Giá trị trả về

Th.

Công : 1

Hỏng : 0

Chú ý :

Page 146: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

!!! Để hàm có thể làm việc , bạn phải định nghĩa nó với tối đa 4 tham số , ngược lại

thì hàm sẽ không được gọi !!!

Ví dụ :

Func MySortFunction($nListViewID, $LParam1, $LParam2, $nColumn)

...

EndFunc

hoặc

Func MySortFunction($nListViewID, $LParam1, $LParam2)

...

EndFunc

Khi hàm được gọi thì 4 tham số trên sẽ mang các giá trị sau :

Vị trí Tham số Ý nghĩa

1 controlID ID của ListView mà hàm cần sử dụng

2 lParam1 Giá trị của mục đầu tiên (theo mặc định là mục controlID).

3 lParam2 Giá trị của mục thứ hai (theo mặc định là mục controlID).

4 column Cột sẽ được nhấp để sắp xếp (cột đầu tiên là 0).

Những giá trị sau sẽ được trả về để thay đổi cách chạy của hàm

Giá trị trả về Ý nghĩa

-1 Mục thứ nhất đặt trước mục thứ hai

0 Không đổi

Page 147: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

1 Mục thứ nhất đặt sau mục thứ hai.

Xem thêm ví dụ trong file help để rõ cách làm việc.

GUICtrlSetBkColor

Thay đổi màu nền hiện tại của control sang một màu khác

GUICtrlSetBkColor ( controlID, backgroundcolor )

Các tham số

controlID ID của control muốn đổi màu nền. ID này được trả về bởi hàm

GUICtrlCreate….

backgroundcolor Màu RGB muốn sử dụng

Giá trị trả về

Th.

Công : Trả về 1

Hỏng : Trả về 0

Chú ý

Chỉ có Button, Label, Checkbox, Group, Radio, Edit, Input, List,

Listview, ListviewItem, Treeview, TreeviewItem, Graphic, Progress và

Slider là có thể được thay đổi màu nền.

Control Progress sẽ không được vẽ với màu khác nếu sử dụng "Windows

XP style"

Các nút bấm (button) sẽ luôn được vẽ lại theo style của Windows Classic.

Mặc khác hàm này chỉ có tác dụng nếu các nút bấm này không được tạo với

style $BS_ICON.

Page 148: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Những phiên bản trước của AutoIt (v3.0.102) sử dụng định dạng màu

BGR , những phiên bản mới hơn sử dụng RGB theo mặc định. Tuy nhiên

bạn có thể thay đổi điều này bằng lựa chọn ColorMode.

Cờ đặc biệt $GUI_BKCOLOR_TRANSPARENT có thể được dùng với

control Label để có được nền trong suốt. Các control Picture thì luôn có một

màu trong suốt.

Cờ đặc biệt $GUI_BKCOLOR_LV_ALTERNATE có thể được dùng với

control ListView để làm màu nền xen kẽ cho từng dòng.

- Các dòng lẻ sẽ lấy màu từ GUICtrlSetBkColor của control

ListView

- Các dòng chẳn sẽ lấy màu từ GUICtrlSetBkColor của control

ListViewItem

GUICtrlSetColor

Thay đổi màu chữ cho control

GUICtrlSetColor ( controlID, textcolor)

Các tham số

controlID Định danh của control , được trả về bởi hàm GUICtrlCreate….

textcolor Màu RGB muốn dùng

Giá trị trả về

Th.

Công : Trả về 1

Hỏng : Trả về 0

Chú ý

Page 149: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Chỉ có Button, Label, Checkbox, Group, Radio, Edit, Input, List,

Listview, ListviewItem, Treeview, TreeviewItem, Graphic và Progress là có

thể được thay đổi màu chữ

Checkbox, Radio hoặc Progress sẽ không được vẽ lại nếu sử dụng

Windows XP style

Button luôn được vẽ lại trong "Windows Classic style".

Những phiên bản trước của AutoIt (v3.0.102) sử dụng định dạng màu

BGR , những phiên bản mới hơn sử dụng RGB theo mặc định. Tuy nhiên

bạn có thể thay đổi điều này bằng lựa chọn ColorMode.

GUICtrlSetData

Chỉnh sửa dữ liệu hiển thị trên control.

GUICtrlSetData ( controlID, data [, default] )

Các tham số

controlID Định danh của control , được trả về từ GUICtrlCreate…

data

Đối với Combo, List, ListView, ListViewItem : văn bản của mỗi

item được ngăn cách bởi Opt("GUIDataSeparatorChar",...)

Đối với Progress : giá trị % (phần trăm)

Slider : giá trị

Group, Label, Button, Checkbox, Radio, Combo, List, Input, Edit,

TabItem : văn bản muốn hiển thị

Date : ngày hoặc thời gian phụ thuộc vào style của control

TreeViewItem: văn bản cần hiển thị

Dummy : giá trị

default [tùy chọn]

với Combo, List : giá trị sẽ làm mặc định

Page 150: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Với Edit, Input : nếu bạn định nghĩa nó không phải là chuỗi rỗng ""

, chuỗi "data" được sẽ được chèn vào vị trí của con nháy (caret) ,

không viết đè chuỗi gốc.

Giá trị trả về

Th.

Công : Trả về 1

Hỏng : Trả về 0

Trả về -1 nếu data không hợp lệ

Chú ý

Đối với control Combo hoặc List :

- Nếu "data" trùng với một mục nhập đã tồn tại , nó sẽ được gán như mặc

định

- Nếu "data" bắt đầu với một ký tự ngăn cách (GUIDataSeparatorChar)

hoặc chuỗi rỗng , danh sách trước đó sẽ bị hủy.

Đối với control ListView, ListViewItem :

Để cập nhật văn bản cho một cột chỉ định , thì chỉ cần bỏ qua những cột

khác. Ví dụ , muốn cập nhật tiêu đề cho cột thứ ba , ta gán "||new_text"

Nếu "new_text" là rỗng , cột và mục con (subitem) trong cột sẽ bị xóa. Ví

dụ , "|" sẽ xóa cột và subitem thứ hai , "" sẽ xóa cột/subitem thứ nhất.

GUICtrlSetData

Chỉnh sửa dữ liệu hiển thị trên control.

GUICtrlSetData ( controlID, data [, default] )

Các tham số

Page 151: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

controlID Định danh của control , được trả về từ GUICtrlCreate…

data

Đối với Combo, List, ListView, ListViewItem : văn bản của mỗi

item được ngăn cách bởi Opt("GUIDataSeparatorChar",...)

Đối với Progress : giá trị % (phần trăm)

Slider : giá trị

Group, Label, Button, Checkbox, Radio, Combo, List, Input, Edit,

TabItem : văn bản muốn hiển thị

Date : ngày hoặc thời gian phụ thuộc vào style của control

TreeViewItem: văn bản cần hiển thị

Dummy : giá trị

default

[tùy chọn]

với Combo, List : giá trị sẽ làm mặc định

Với Edit, Input : nếu bạn định nghĩa nó không phải là chuỗi rỗng ""

, chuỗi "data" được sẽ được chèn vào vị trí của con nháy (caret) ,

không viết đè chuỗi gốc.

Giá trị trả về

Th.

Công : Trả về 1

Hỏng : Trả về 0

Trả về -1 nếu data không hợp lệ

Chú ý

Đối với control Combo hoặc List :

Page 152: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

- Nếu "data" trùng với một mục nhập đã tồn tại , nó sẽ được gán như mặc

định

- Nếu "data" bắt đầu với một ký tự ngăn cách (GUIDataSeparatorChar)

hoặc chuỗi rỗng , danh sách trước đó sẽ bị hủy.

Đối với control ListView, ListViewItem :

Để cập nhật văn bản cho một cột chỉ định , thì chỉ cần bỏ qua những cột

khác. Ví dụ , muốn cập nhật tiêu đề cho cột thứ ba , ta gán "||new_text"

Nếu "new_text" là rỗng , cột và mục con (subitem) trong cột sẽ bị xóa. Ví

dụ , "|" sẽ xóa cột và subitem thứ hai , "" sẽ xóa cột/subitem thứ nhất.

GUICtrlSetFont

Thiết lập font chữ cho control

GUICtrlSetFont (controlID, size [, weight [, attribute [, fontname]]] )

Các tham số

controlID ID của control , được trả về từ hàm GUICtrlCreate…

size Size của font (mặc định là 8.5)

weight [tùy chọn] trọng lượng của font (default 400 = bình thường)

attribute

[tùy chọn] muốn thiết lập định dạng cho ký tự , ta có in nghiêng : 2 ,

gạch chân : 4 , gạch ngang (strike) : 8 . Muốn kết hợp nhiều định dạng

ta cộng các giá trị với nhau. Ví dụ , muốn có chữ in nghiêng và gạch

chân , ta dùng 2+4.

fontname [tùy chọn] tên của font chữ sẽ dùng

Giá trị trả về

Th.

Công : Trả về 1

Page 153: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Hỏng : Trả về 0

Chú ý

Theo mặc định , control sẽ sử dụng font được thiết lập từ GUISetFont

Size có thể là một số thập phân , như 8.5

Vài control như Label , mặc định giá trị 8.5 có thể được thay bằng 9 theo

ghi nhận từ Windows Theme

Xem Appendix để có được một danh sách đầy đủ về các font của

windows

GUICtrlSetFont

Thiết lập font chữ cho control

GUICtrlSetFont (controlID, size [, weight [, attribute [, fontname]]] )

Các tham số

controlID ID của control , được trả về từ hàm GUICtrlCreate…

size Size của font (mặc định là 8.5)

weight [tùy chọn] trọng lượng của font (default 400 = bình thường)

attribute

[tùy chọn] muốn thiết lập định dạng cho ký tự , ta có in nghiêng : 2 ,

gạch chân : 4 , gạch ngang (strike) : 8 . Muốn kết hợp nhiều định dạng

ta cộng các giá trị với nhau. Ví dụ , muốn có chữ in nghiêng và gạch

chân , ta dùng 2+4.

fontname [tùy chọn] tên của font chữ sẽ dùng

Giá trị trả về

Th.

Công : Trả về 1

Page 154: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Hỏng : Trả về 0

Chú ý

Theo mặc định , control sẽ sử dụng font được thiết lập từ GUISetFont

Size có thể là một số thập phân , như 8.5

Vài control như Label , mặc định giá trị 8.5 có thể được thay bằng 9 theo

ghi nhận từ Windows Theme

Xem Appendix để có được một danh sách đầy đủ về các font của

windows

GUICtrlSetOnEvent

Định nghĩa một hàm bởi người sử dụng và hàm này sẽ được gọi mỗi khi control

được click vào

GUICtrlSetOnEvent ( controlID, "function" )

Các tham số

controlID ID của control , được trả về từ hàm GUICtrlCreate….

function Tên của hàm sẽ gọi khi cần control được click

Giá trị trả về

Th.

Công : Trả về 1

Hỏng : Trả về 0

Chú ý

Các hàm OnEvent (theo sự kiện) chỉ được gọi khi lựa chọn

GUIOnEventMode được thiết lập sang giá trị 1 – trong chế độ này thì chế độ

GUIGetMsg sẽ KHÔNG được sử dụng

Page 155: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Khi user-function được gọi , id của control có thể được truy lại bằng

macro @GUI_CTRLID.

Nếu bạn cần handle của cửa sổ và handle của control thì có thể truy lại

với macro @GUI_WINHANDLE hoặc @GUI_CTRLHANDLE.

Nếu hàm là một chuỗi rỗng "", thì không có gì xảy ra khi bạn click vào

control.

GUICtrlSetPos Thay đổi vị trí của control trên cửa sổ GUI

GUICtrlSetPos ( controlID, left, top [, width [, height]] ) Các tham số controlID ID của control , id này được trả về từ hàm GUICtrlCreate…. left Lề trái (tọa độ x) cần gán top Lề trên (tọa độ y) cần gán width [tùy chọn] độ rộng mới cho control height [tùy chọn] chiều cao mới cho control Giá trị trả về Th. Công : Trả về 1

Hỏng : Trả về 0 Chú ý None. GUICtrlSetState

Thay đổi trạng thái của control

GUICtrlSetState ( controlID, state )

Các tham số

controlID ID của control , được trả về từ hàm GUICtrlCreate….

state Xem bảng trạng thái bên dưới

Page 156: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ
Page 157: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Giá trị trả về

Th.

Công : Trả về 1

Hỏng : Trả về 0

Chú ý

Bảng trạng thái

State Miêu tả

Không thay đổi 0

$GUI_UNCHECKED Radio, Checkbox hoặc ListViewItem sẽ không

được đánh dấu (uncheck)

$GUI_CHECKED Radio, Checkbox or ListViewItem sẽ được đánh

dấu (check)

$GUI_INDETERMINATE Checkbox có ba trạng thái thuộc tính sẽ bị tô màu

xám

$GUI_AVISTART Avi sẽ bắt đầu play

$GUI_AVISTOP Avi sẽ dừng chơi

$GUI_AVICLOSE Avi sẽ dừng chơi và giải phóng tài nguyên.

$GUI_DROPACCEPTED Control sẽ chấp nhận thao tác kéo thả : từ file hoặc

từ control khác . Xem chú ý

$GUI_NODROPACCEPTED Control sẽ không chấp nhận kéo thả

$GUI_SHOW Control sẽ hiển thị. Trên control Tabitem sẽ chọn

tab đầu đầu tiên để hiển thị

Page 158: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

$GUI_HIDE Control sẽ ẩn

$GUI_ENABLE Control sẽ được kích hoạt để tương tác được

$GUI_DISABLE Control bị vô hiệu không tương tác (sẽ bị tô màu

xám)

$GUI_FOCUS Control sẽ được đưa tiêu điểm được chọn hoặc

input

$GUI_NOFOCUS Listview sẽ mất tiêu điểm.

$GUI_DEFBUTTON Control sẽ được thiết lập như nút mặc định trên cửa

sổ. Xem phần chú ý đối với các TreeviewItem

$GUI_EXPAND TreeViewItem mở rộng các mục con

$GUI_ONTOP Control sẽ có thuộc tính ở-trên (ontop) đối với cửa

sổ (zOrdering).

Các trạng thái có thể được cộng lại với nhau để có đa thuộc tính , ví dụ

như $GUI_DISABLE + $GUI_HIDE sẽ làm cho control bị vô hiệu và ẩn đi.

Nếu control AVI bị làm ẩn với $GUI_HIDE , nó nên được đóng lại với

$GUI_AVICLOSE.

Trạng thái của menu ngữ cảnh "contextmenu" không thể bị thay đổi

Trạng thái của menu hoặc menuitem không thể được ẩn.

Trạng thái của một "listviewitem" có thể bị thay đổi nếu nó liên kết với

một Listview mà listview này được tạo với style mở rộng

$LVS_EX_CHECKBOXES. $GUI_FOCUS và $GUI_NOFOCUS có thể

được sử dụng trên listviewitem riêng biệt ,

Page 159: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

style $LVS_SHOWSELALWAYS sẽ làm cho mục được chọn luôn hiển thị

thậm chí nó không có tiêu điểm.

! Thông tin quan trọng đối với $GUI_EXPAND : trạng thái này chỉ hữu

dụng cho các TreeViewItem. Nếu bạn muốn sử dụng hành động này , ít nhất

phải có một nhánh-con trong TreeView mà bạn đã tạo !

Nếu bạn muốn chọn mục khác trong một TreeView , bạn có thể dùng

$GUI_FOCUS – TreeView mẹ sẽ lấy tiêu điểm của cửa sổ và mục được chỉ

định sẽ bị đánh dấu như là được chọn

Nếu muốn thiết lập một mục trong TreeView làm mục mặc định , có

nghĩa là nó sẽ bị vẽ in đậm. Bạn có thể gọi $GUI_DEFBUTTON – để tắt nó

thì sử dụng một giá trị khác $GUI_DEFBUTTON, chẳng hạn như 0. Trạng

thái này sẽ không được trả về bởi GUICtrlGetState.

Với những control có tiếp nhận $GUI_EVENT_DROPPED, macro

@GUI_DRAGID sẽ trả về controlID từ nơi mà sự lôi-kéo bắt đầu (-1 nếu từ

một file, @GUI_DRAGFILE chứa tên tập tin đang được kéo đi) và

@GUI_DROPID trả về controlID của control được thả

Chỉ việc lôi-kéo một ListViewItem sẽ khởi động tiến trình kéo và thả

(drag&drop). Macro @GUI_DRAGID sẽ là ID của ListView

GUICtrlSetStyle

Thay đổi style cho control

GUICtrlSetStyle ( controlID, style [, exStyle] )

Các tham số

controlID ID của control , được trả về từ hàm GUICtrlCreate….

style Style cần thiết lập cho control . Xem GUI Control Styles Appendix.

exStyle [tùy chọn] style mở rộng muốn thiết lập. Xem Extended Style Table.

Page 160: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Giá trị trả về

Th.

Công : Trả về 1

Hỏng : Trả về 0

Chú ý

Vài style không thể được thay đổi một cách linh động. Xem tài liệu MSDN. Style

cho combo box $CBS_UPPERCASE là một ví dụ.

Xử lý sự kiện trên GUI

Khi bạn tạo ra một cửa sổ và các thành phần con trên đó thì tất nhiên chúng phải

được dùng cho một mục đích mà bạn đã vạch ra , nhập liệu, vẽ, chơi nhạc, tìm

kiếm file,…. Nhưng làm sao biết được rằng cái gì đang diễn ra trên GUI của bạn ,

phím nào vừa được nhấn ? chuột trái vừa nhấp ở đâu ? mục nào được chọn ?….

Tất cả những cái này chúng ta sẽ nắm bắt được bởi vì chúng do windows tạo ra và

AutoIt sẽ cung cấp cho chúng ta cách để biết được và xử lý được những sự kiện đã

và đang diễn ra trên cửa sổ.

AutoIt hỗ trợ cho ta hai phương pháp để xử lý sự kiện :

Sử dụng vòng lặp thông điệp

Sử dụng chế độ OnEvent

Vòng lặp thông điệp

Trong chế độ này , bạn sẽ sử dụng một vòng lặp khép kín để nhận liên tục các sự

kiện nào sẽ xảy ra trên GUI và ứng với mỗi sự kiện ta sẽ viết các lệnh tương ứng.

Để nhận được các sự kiện nào đã xảy ra trên GUI ta dùng hàm GUIGetMsg. Đặc

điểm của chế độ này là vòng lặp và hàm GUIGetMsg sẽ được gọi nhiều lần trong

một giây.

Page 161: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Trong trường hợp GUI là vấn đề bạn quan tâm trên cả ,và tất cả những gì bạn cần

là đợi sự kiện xảy ra thì chế độ vòng lặp thông điệp sẽ rất phù hợp để bạn làm

những việc này.

Chế độ OnEvent

OnEvent không sử dụng vòng lặp để tiếp nhận sự kiện , mà sử dụng một hàm đã

định nghĩa trước đó để phản ứng lại với một sự kiện và/hoặc một control tương

ứng. Khi hàm được gọi thì đoạn chương trình chính tạm dừng , hàm được gọi hoàn

tất thì đoạn chương trình chính sẽ chạy trở lại.

Khi GUI không phải là vấn đề quan tâm hàng đầu của bạn , và bạn còn có nhiều

tác vụ khác cần xử lý bên trong đoạn chương trình chính thì OnEvent là chế độ

thích hợp nhất.

VÒNG LẶP THÔNG ĐIỆP

Trong chế độ vòng lặp thông điệp , đoạn mã của sẽ trải qua phần lớn thời gian làm

việc trong một vòng lặp khép kín. Vòng lặp này chỉ đơn giản là sử dụng các giá trị

được trả về từ hàm GUIGetMsg( ) . Các giá trị đó cho biết sự kiện nào đang xảy ra

trên GUI (nút được nhấn , đóng gui, ... ).

Chế độ này chính là chế độ xử lý mặc định của AutoIt dành cho GUI. Trong chế độ

vòng lặp thông điệp bạn chỉ nhận được các sự kiện khi bạn chủ động gọi và nhận

từ GUIGetMsg , vì vậy bạn phải đảm bảo rằng hàm được gọi nhiều lần trong một

giây , ngược lại có thể làm cho GUI của bạn không có phản ứng.

Dạng cơ bản của vòng lặp thông điệp

Dạng chung của vòng lặp thông điệp có thể trình bày như sau :

While 1

$msg = GUIGetMsg()

...

...

WEnd

Page 162: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ
Page 163: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Thông thường một vòng lặp khép kín như trên sẽ làm cho tần suất CPU lên 100%

(xem trong task manager) – nhưng may mắn là hàm GUIGetMsg sẽ tự động tạo ra

khoảng dừng và giảm tải CPU trong khi chờ đợi sự kiện. Cho nên bạn không cần

phải đặt bất kỳ một lệnh sleep hay lệnh trì hoãn nào ở đây bởi vì việc này sẽ làm

cho GUI của bạn không phản ứng với các sự kiện.

Các sự kiện của GUI

Có ba loại thông điệp sự kiện mà GUIGetMsg sẽ trả về :

- No Event

- Control Event

- System Event

No Event

Khi không có sự kiện nào xảy ra , hàm GUIGetMsg sẽ trả về giá trị 0. Đây là sự

kiện phổ biến nhất trong các GUI thông thường

Control Event

Khi một control được click hoặc thay đổi thì một sự kiện sẽ được gửi đi , sự kiện

này xảy ra trên control nên được gọi là Control Event . Thường thì sự kiện này là

một số nguyên dương cho biết controlID (định danh của control trên GUI, được

tạo ra bởi hàm GUICtrlCreate... ) nào đang/vừa được tương tác

System Event

Các sự kiện hệ thống – như đóng một GUI – là một số âm . Các sự kiện khác nhau

được định nghĩa trong thư viện GUIConstantsEx.au3. Dưới đây là các sự kiện

phổ biến thường hay dùng :

$GUI_EVENT_CLOSE

$GUI_EVENT_MINIMIZE

$GUI_EVENT_RESTORE

$GUI_EVENT_MAXIMIZE

$GUI_EVENT_PRIMARYDOWN

Page 164: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

$GUI_EVENT_PRIMARYUP

$GUI_EVENT_SECONDARYDOWN

$GUI_EVENT_SECONDARYUP

$GUI_EVENT_MOUSEMOVE

$GUI_EVENT_RESIZED

$GUI_EVENT_DROPPED

Ví dụ GUI

Ở đây chúng ta sẽ bắt đầu với chương trình hello world đơn giản như sau :

#include <GUIConstantsEx.au3>

GUICreate("Hello World", 200, 100) GUICtrlCreateLabel("Hello world! How are you?", 30, 10) GUICtrlCreateButton("OK", 70, 50, 60) GUISetState(@SW_SHOW) Sleep(2000)

Đoạn chương trình trên sẽ hiển thị một cửa sổ với một dòng văn bản "Hello world !

How are you ? " , một nút bấm và sẽ thoát sau 2 giây.

Và bây giờ chúng ta sẽ hoàn tất chương trình trên bằng việc sử dụng vòng lặp

thông điệp , lúc này bạn sẽ thấy mọi thứ linh động và hữu ích hơ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() Select Case $msg = $okbutton MsgBox(0, "GUI Event", "You pressed OK!") Case $msg = $GUI_EVENT_CLOSE

Page 165: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

MsgBox(0, "GUI Event", "You clicked CLOSE! Exiting...") ExitLoop EndSelect WEnd

Mọi thứ như bạn thấy đấy , thật dễ dàng. Bạn có thể tạo cửa sổ và các control rồi

thêm vào các mệnh lệnh cho chúng xử lý. Tuy nhiên đây chỉ là một ví dụ rất đơn

giản nhưng cũng rất cơ bản và bạn nên hiểu rõ. Khi thành thạo bạn có thể làm ra

những thứ khác hay hơn nhiều.

GUIGetMsg nâng cao và chế độ nhiều cửa sổ

Các định danh (ID) của control là duy nhất , thậm chí khi bạn có nhiều cửa sổ thì

đoạn mã của bạn vẫn sẽ làm việc tốt . Tuy nhiên , khi xử lý các sự kiện như

$GUI_EVENT_CLOSE hoặc $GUI_MOUSEMOVE bạn cần phải biết được GUI

nào đã phát ra thông điệp này để mà ra lệnh cho đúng. Giả sử rằng bạn vừa tạo ra

hai cửa sổ và chỉ muốn thoát chương trình khi cửa sổ thứ nhất gửi đi thông điệp

Close, nếu cửa sổ thứ hai cũng phát thông điệp Close thì chỉ ẩn GUI đi, chứ không

thoát ứng dụng. Muốn làm được điều này bạn phải gọi GUIGetMsg giống như sau

:

$msg = GUIGetMsg(1)

Khi gọi với tham số là 1 , giá trị trả về bây giờ không còn là một số nguyên nữa mà

thay vào đó là một mảng. Sự kiện nào vừa xảy ra sẽ được lưu trong phần tử đầu

tiên ($array[0]) và thông tin bổ sung như handle của cửa sổ đã phát ra sự kiện sẽ

được lưu trong phần tử thứ hai ($array[1]) . Ví dụ ở trên sẽ được sửa lại để làm

việc với hai cửa sổ và bạn sẽ hiểu cách viết mã xử lý chúng như thế nào .

#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, -1, 100) GUISetState(@SW_SHOW, $dummywindow)

Page 166: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

GUISwitch($mainwindow) GUISetState() While 1 $msg = GUIGetMsg(1) Select Case $msg[0] = $okbutton MsgBox(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 EndSelect WEnd

Đầu tiên , có một sự thay đổi quan trọng là việc xuất hiện của hàm GUISwitch –

khi một cửa-sổ-mới (new window) được tạo ra thì nó trở thành cửa sổ mặc định

cho các thao tác của GUI trong tương lai (bao gồm việc tạo control). Trong ví dụ

này , chúng ta muốn làm việc với của sổ chính "Hello world" , không phải cửa sổ

dummy , nên phải switch về cửa sổ chính. Một vài hàm về GUI cho phép bạn sử

dụng handle cửa sổ trong tham số để tự động chuyển sang GUI cần chứa control

mà không cần phải dùng đến lệnh GUISwitch. Và chúng ta đã có một trường hợp

trong đoạn code trên :

GUISetState(@SW_SHOW, $dummywindow)

Sự thay đổi tiếp theo là cách gọi hàm GUIGetMsg và kiểm tra các sự kiện – để ý

việc dùng $msg[0] và $msg[1] – bây giờ chúng ta sẽ thoát khỏi chương trình khi

event Close được gởi đi và nó phải xuất phát từ cửa sổ chính.

CHẾ ĐỘ OnEvent

Trong chế độ OnEvent , việc xử lý các sự kiện xảy ra trên GUI không phải bằng

cách dò xét liên tục bằng một vòng lặp khép kín nữa , mà thay vào đó là việc tạm

dừng đoạn script và gọi một hàm đã được định nghĩa trước đó dành cho một sự

kiện với một control tương ứng. Ví dụ như người dùng nhấp vào nút Button1 thì

đoạn chương trình chính của bạn nhất thời sẽ ngưng lại để gọi hàm đã tạo trước đó

Page 167: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

dành cho Button1. Sau khi hàm đã hoàn tất công việc của nó thì đoạn chương trình

chính của bạn sẽ chạy tiếp. Chế độ này tương tự như trong phương thức xử lý form

của Visual Basic.

Khi một GUI đang thực thi, đoạn chương trình chính của bạn có thể làm bất cứ

công việc gì , nhưng để tạo nên sự đơn giản cho các ví dụ , chúng ta sẽ tạo nên một

vòng lặp While với khoảng dừng bên trong.

Theo mặc định , GUI luôn được xử lý theo chế độ vòng lặp thông điệp. Vì vậy để

chuyển sang chế độ OnEvent ở đầu đoạn mã chúng ta phải sử dung

Opt("GUIOnEventMode", 1).

Dạng OnEvent cơ bản

Dạng tổng quát có thể trình bày như sau :

While 1 Sleep(1000) ; khoảng dừng của vòng lặp WEnd Func Event1() ; Code to handle event goes here EndFunc Func Event2() ; Code to handle event goes here EndFunc

GUI Events

Trong chế độ OnEvent , GUI của bạn sẽ phát ra các sự kiện sau :

- Control Event

- System Event

Cả hai loại sự kiện trên sẽ gọi một hàm do người viết chương trình thiết lập , hàm này có thể được chỉ định cho GUI (sử dụng hàm GUISetOnEvent) hoặc chỉ định xử lý cho control (sử dụng hàm GUICtrlSetOnEvent) . Nếu một sự kiện nào đó xảy ra mà AutoIt không tìm thấy hàm làm việc tương ứng thì nó sẽ bị bỏ qua. Bên

Page 168: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

trong hàm được gọi ta có thể sử dụng các macro khác nhau do AutoIt cung cấp để

hỗ trợ việc xử lý các sự kiện

Macro Chi tiết

@GUI_CTRLID ID của control đang gửi thông điệp hoặc ID của sự kiện

hệ thống

@GUI_WINHANDLE Handle của GUI đã gửi đi thông điệp

@GUI_CTRLHANDLE Handle của control đã gửi đi thông điệp (nếu có thể dùng

được)

Chú ý : Bạn có thể sử dụng một hàm cho nhiều sự kiện , điều bạn cần làm trong

trường hợp này là tạo ra các hành động khác nhau dựa trên macro @GUI_CTRLID

. Ví dụ , bạn có thể đăng ký tất cả sự kiện hệ thống vào trong một hàm rồi tùy

trường hợp mà viết lệnh.

Control Event

Khi bạn nhấp hoặc thay đổi một control thì một sự kiện được gửi đi . Sự kiện đó

được gửi vào trong một hàm đã định nghĩa và đã được thiết lập trong

GUICtrlSetOnEvent. Bên trong hàm này thì macro @GUI_CTRLID mang giá trị

là controlID được trả về khi tạo bằng hàm GUICtrlCreate....

System Event

Các sự kiện hệ thống – ví dụ như close một gui – thì cũng được gởi đi theo cách

tương tự như Control Event . Tuy nhiên sự kiện lại được gửi vào hàm được thiết

lập trong GUISetOnEvent. Sự kiện hệ thống có thể mang những giá trị sau :

$GUI_EVENT_CLOSE

$GUI_EVENT_MINIMIZE

$GUI_EVENT_RESTORE

$GUI_EVENT_MAXIMIZE

Page 169: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

$GUI_EVENT_PRIMARYDOWN

$GUI_EVENT_PRIMARYUP

$GUI_EVENT_SECONDARYDOWN

$GUI_EVENT_SECONDARYUP

$GUI_EVENT_MOUSEMOVE

$GUI_EVENT_RESIZED

$GUI_EVENT_DROPPED

Ví dụ

Chúng ta sẽ bắt đầu với chương trình hello world đơn giản sau :

#include <GUIConstantsEx.au3> GUICreate("Hello World", 200, 100) GUICtrlCreateLabel("Hello world! How are you?", 30, 10) GUICtrlCreateButton("OK", 70, 50, 60) GUISetState(@SW_SHOW) Sleep(2000)

Sử dụng chế độ OnEvent , chúng ta sẽ viết lại để hoàn tất đoạn mã trên :

#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 1 Sleep(1000) ; Idle around WEnd Func OKButton() ;Note: at this point @GUI_CTRLID would equal $okbutton, ;and @GUI_WINHANDLE would equal $mainwindow MsgBox(0, "GUI Event", "You pressed OK!")

Page 170: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

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

Như bạn thấy , nó rất đơn giản. Mặc dù chỉ là ví dụ cơ bản nhưng sẽ là cái nền để

bạn tạo ra những cái hay hơn đấy.

Thao tác nâng cao và chế độ nhiều cứa sổ

Chúng ta cũng đã biết rằng các control ID là duy nhất , cho dù bạn có nhiều cửa sổ

và nhiều control thì bạn vẫn có thể xử lý chúng theo định danh mà bạn đã chọn.

Tuy nhiên vấn đề là xử lý như thế nào ?

Ở đây sẽ trình bày một ví dụ tương tự như ví dụ trên , nhưng có thêm một cửa sổ

dummy nữa :

#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") $dummywindow = GUICreate("Dummy window for testing ", 200, 100, 500, 200) GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked") GUISetState(@SW_SHOW, $dummywindow) GUISwitch($mainwindow) GUISetState(@SW_SHOW) While 1 Sleep(1000) ; Idle around WEnd

Page 171: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

Func OKButton() ;Note: at this point @GUI_CTRLID would equal $okbutton MsgBox(0, "GUI Event", "You pressed OK!") EndFunc Func CLOSEClicked() ;Note: at this point @GUI_CTRLID would equal $GUI_EVENT_CLOSE, ;@GUI_WINHANDLE will be either $mainwindow or $dummywindow If @GUI_WINHANDLE = $mainwindow Then MsgBox(0, "GUI Event", "You clicked CLOSE in the main window! Exiting...") Exit EndIf EndFunc

Đầu tiên , có một sự thay đổi quan trọng là việc xuất hiện của hàm GUISwitch –

khi một cửa-sổ-mới (new window) được tạo ra thì nó trở thành cửa sổ mặc định

cho các thao tác của GUI trong tương lai (bao gồm việc tạo control). Trong ví dụ

này , chúng ta muốn làm việc với của sổ chính "Hello world" , không phải cửa sổ

dummy , nên phải switch về cửa sổ chính. Một vài hàm về GUI cho phép bạn sử

dụng handle cửa sổ trong tham số để tự động chuyển sang GUI cần chứa control

mà không cần phải dùng đến lệnh GUISwitch. Và chúng ta đã có một trường hợp

trong đoạn code trên :

GUISetState(@SW_SHOW, $dummywindow)

Cũng xin nhắc là chúng ta sử dụng hàm OnEvent để điều khiển nút "close" cho cả

hai cửa sổ và sau đó sử dụng macro @GUI_WINHANDLE để xét xem cửa sổ nào

vừa gởi đi sự kiện. Chúng ta chỉ đóng GUI khi nút close được nhấn và thông điệp

đó xuất phát từ cửa sổ chính (không phải dummy) . Nhưng bạn cũng có thể sử gán

cho mỗi cửa sổ một hàm khác nhau để xử lý nếu bạn bạn thích.

_Main() Func _Main() HotKeySet("{ESC}", "_Quit") ; press ESC to exit While 1

Page 172: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

$pos = MouseGetPos() ToolTip("Mouse : " & $pos[0] & ", " &$pos[1] ) Sleep(10) WEnd EndFunc ;==>_Main Func _Quit() Exit EndFunc ;==>_Quit #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <EditConstants.au3> #include <Timers.au3> Global $string , $def_str, $temp_str , $i , $len , $run , $nDelay , $misc , $timer2type ; run = 1 : playing run=2 : paused run=0 : stoped ; i : dem so ky tu can lay $str1 = "when i saw you at the party , when you asked me girlfriend , i didn't know why i can't say clearly . You 're as pretty as angel , your eyes seemed to burn my heart. My strange lover..." & @CRLF $str2 = "When i smelt a perfume from your hair , when i kissed your body , the waves of love were flowing in my and your soul . You said , don't leave me baby ..." & @CRLF $str3 = "When i heard words you told , when i believed your heart , and now i knew i was a fool . I didn't cry but my soul was dying , my heart broke when you said ''Good bye''" & @CRLF $str4 = "When i looked the waves of ocean , when i missed my memories , i felt all thing were only a deam . A full house which would never exist in this world. The sun was setting..." & @CRLF $str5 = "When i told my children stories , when i took my wife's hands , i knew the happy life was right here . '' Every thing is never perfect , i have to accept . '' " & @CRLF $str6 = "When i see the winter of my life , when i write these lines , all left ever and ever, all will never return . Outside the window , sights are a white by snow , the wind 's still blowing , it's still cold, very cold. " $str7 = "Maybe this's final winter i can look , think and count leaves ..." $def_str = $str1 & $str2 & $str3 & $str4 & $str5 & $str6 & $str7 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ $string = $def_str $len = StringLen($string)

Page 173: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ
Page 174: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

$i = 0 $run = 0 $nDelay = 50 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ $gui = GUICreate("A Text Typer", 700, 500) $eMainText = GUICtrlCreateEdit("", 5, 5, 690, 420, $ES_AUTOVSCROLL + $WS_VSCROLL+ $ES_READONLY) GUICtrlSetFont(-1, 10, 400, default, "Tahoma") $text_ShowSource = GUICtrlCreateLabel("Source : <default text>", 8, 435, 690, 20) $text_delay = GUICtrlCreateLabel("Delay (miliSecond) :" , 10, 470, 100, 30) $eDelay = GUICtrlCreateInput($nDelay, 115, 467, 40, 20, $ES_NUMBER) $btnPlayPause = GUICtrlCreateButton("Start", 170, 462, 80, 30) $btnStop = GUICtrlCreateButton("Stop", 250, 462, 80, 30) $btnOpenText = GUICtrlCreateButton("Open text", 350, 462, 80, 30) $btnLoadDefault = GUICtrlCreateButton("Load default text", 430, 462, 110, 30) $text_status = GUICtrlCreateLabel("Status : Stoped...", 580, 470, 150, 30) GUISetState() ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ while 1 $msg = GUIGetMsg() Switch $msg case $GUI_EVENT_CLOSE ExitLoop Case $btnPlayPause If $run=0 Or $run=2 Then; if state is "stoped" or "paused", then $run = 1 ; set state to "start" update_status(1) ; set new text for buttons and status $nDelay = Abs(Int(GUICtrlRead($eDelay))) ; read delay value for speed type $timer2type = _Timer_SetTimer($gui, $nDelay, "TypeText") ; create a new timer (note : this will use current valure of $i and $run) GUICtrlSetState($eDelay, $GUI_DISABLE) ; disable input of delay ElseIf $run=1 Then ; if state is "typing" , then

Page 175: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

$run = 2 ; change state to "stoped" update_status(2) ; set new texts for buttons GUICtrlSetState($eDelay, $GUI_ENABLE) ; enable delay s input _Timer_KillTimer($gui, $timer2type) ; kill timer to stop typing text (note : current value will be used on next time when i create new timer) EndIf Case $btnStop _Timer_KillTimer($gui, $timer2type) $run = 0 $i = 0 update_status(0) GUICtrlSetState($eDelay, $GUI_ENABLE) Case $btnOpenText _Timer_KillTimer($gui, $timer2type) ; kill timer to stop typing text If BrowseText() Then $i = 0 ; check if a new file is opened successfully , if yes , then reset position which is reading in text $nDelay = Abs(Int(GUICtrlRead($eDelay))) ; update delay value $timer2type = _Timer_SetTimer($gui, $nDelay, "TypeText") ; create a new timer for typing text $run = 1 ; set state this time is RUNNING update_status(1) ; update text on button and status Case $btnLoadDefault _Timer_KillTimer($gui, $timer2type) $i = 0 $run = 0 update_status(0) $string = $Def_str GUICtrlSetData($text_ShowSource, "Source : <Default text>") $nDelay = Abs(Int(GUICtrlRead($eDelay))) $timer2type = _Timer_SetTimer($gui, $nDelay, "TypeText")

Page 176: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

$run = 1 update_status(1) EndSwitch WEnd ;============================================================== ; this func will set new texts for buttons and status Func update_status($nState) If $nState=0 Then ; neu trang thai la stop GUICtrlSetData($btnPlayPause, "Start") GUICtrlSetData($text_status, "Status : Stoped...") ElseIf $nState=1 Then ; neu trang thai la play GUICtrlSetData($btnPlayPause, "Pause") GUICtrlSetData($text_status, "Status : Typing...") Else ; neu trang thai la pause GUICtrlSetData($btnPlayPause, "Start") GUICtrlSetData($text_status, "Status : Paused...") EndIf EndFunc ; this func will show open dialog for user who choose a text file and if success then continue to type with new texts Func BrowseText() Local $filePath, $file $filePath = FileOpenDialog("Open a text file", @MyDocumentsDir, "Text (*.txt) | All file (*.*)", 1+2) If @error <> 1 Then $file = FileOpen($filePath, 0) If $file =-1 Then MsgBox(16, "Error", " I'm sorry. A error occured when I read file. ") Return 0 Else $string = FileRead($file) FileClose($file) GUICtrlSetData($text_showSource , "Source : " & $filepath) EndIf Else return 0 EndIf Return 1

Page 177: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

EndFunc ; it's important , this will type text and show it on GUI Func TypeText($hWnd, $Msg, $iIDTimer, $dwTime) $i += 1 If ($i>StringLen($string)) Then $i=0 $run = 0 update_status(0) GUICtrlSetData($text_status, "Status : Completed") _Timer_KillTimer($gui, $timer2type) Return EndIf $temp_str = StringLeft($string, $i) $condition = StringRight($temp_str, 1) <> @CR And StringRight($temp_str, 1)<>@LF If $condition Then $temp_str &= "_" GUICtrlSetData($eMainText, $temp_str) Else Sleep(400) EndIf EndFunc #include <GUIConstants.au3> #include <WindowsConstants.au3> #include <EditConstants.au3> #include <Timers.au3> Global $str , $count, $temp , $Timer_Types $str = " Hi there , this is a sample of auto-typed text" $count = 0 Opt("GUICloseOnESC",0) ;============== MAKE GUI =========================================== $gui = GUICreate("A type text (basic)", 500, 336, 193, 125) $eMainEdit = GUICtrlCreateEdit("", 8, 11, 481, 273, BitAND($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN,$WS_VSCROLL)) $txt_speed = GUICtrlCreateLabel("Speed (miliSecond) : ", 20, 300, 104, 17) $eSpeed = GUICtrlCreateInput("50", 135, 300, 41, 21, BitOR($ES_AUTOHSCROLL,$ES_NUMBER)) $btnStartStop = GUICtrlCreateButton("Start", 200, 295, 108, 30, 0)

Page 178: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

$btnOpen = GUICtrlCreateButton("Open text", 365, 295, 112, 30, 0) GUISetState(@SW_SHOW) ;============================================================================================== While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $btnStartStop If GUICtrlRead($btnStartStop)="Start" Then GUICtrlSetData($btnStartStop, "Stop") GUICtrlSetState($eSpeed, $GUI_DISABLE) $nDelay = Abs(Int(GUICtrlRead($eSpeed))) $Timer_Type = _Timer_SetTimer($gui , $nDelay, "_Type_Text") Else _Timer_KillAllTimers($gui) GUICtrlSetData($btnStartStop, "Start") GUICtrlSetState($eSpeed, $GUI_ENABLE) $count = 0 EndIf Case $btnOpen _Timer_KillAllTimers($gui) If BrowseFile() Then $count = 0 GUICtrlSetState($eSpeed, $GUI_DISABLE) $nDelay = Abs(Int(GUICtrlRead($eSpeed))) $Timer_Type = _Timer_SetTimer($gui, $nDelay, "_Type_Text") GUICtrlSetData($btnStartStop, "Stop") EndSwitch WEnd ;==================================================================== Func BrowseFile() Local $path, $file, $IsError=0 $path = FileOpenDialog("Open text file", @MyDocumentsDir, "Text (*.txt)|All file (*.*)" , 1+2) If @error=1 Then MsgBox(16, "Error", "Sorry. I can't open file. Previous texts will be continued.")

Page 179: GIỚI THIỆU VỀ AUTOIT - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/lap-trinh-ung... · GIỚI THIỆU VỀ AUTOIT AutoIt v3 là một ngôn ngữ

$IsError = 1 Else $file = FileOpen($path, 0) If $file=-1 Then MsgBox(16, "Error", "Sorry. I can't read this file") $IsError = 1 EndIf $str = FileRead($file) FileClose($file) EndIf If $IsError=0 Then Return 1 ; open file successfully Else Return 0 ; fail EndIf EndFunc ; important function , this will type text automaticly Func _Type_Text($hwnd, $msg, $wParam, $lParam) $count += 1 If $count>StringLen($str) Then $count = 0 _Timer_KillAllTimers($gui) GUICtrlSetData($btnStartStop, "Start") GUICtrlSetState($eSpeed, $GUI_ENABLE) Return EndIf $temp = StringLeft($str, $count) $temp &= "|" GUICtrlSetData($eMainEdit, $temp) EndFunc