1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Giáo Trình AutoIT cơ bản doc

179 899 13

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 179
Dung lượng 3,96 MB

Nội dung

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.sourceedit.com/ nhưng sẽ phải thực hiện cấu hình việc khai

Trang 1

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

Trang 2

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

Trang 3

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

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ừ

Trang 4

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ụ

Trang 5

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

Trang 7

Ở 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

Trang 8

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ị

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)

Trang 9

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 ^

* / + - &

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

Trang 10

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

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ú ý :

Trang 11

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)

Trang 12

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

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

Trang 13

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

Trang 14

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

Trang 15

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

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

Trang 16

 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

Trang 17

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,

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"

Trang 18

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

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

Trang 19

Ví dụ :

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

Global $explore = "Explorer " & @WindowsDir

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

Trang 20

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ự

Trang 21

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

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 đó :

Trang 23

 <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ấ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)]]

Trang 24

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

Trang 25

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

Trang 26

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

Trang 27

+ 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ụ :

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

Trang 28

@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

Trang 29

@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

Trang 30

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

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

@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

Trang 31

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

@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

Trang 32

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

Trang 33

@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

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 :

Trang 34

If <điều kiện> 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

Trang 35

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

Trang 36

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

Trang 37

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

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 :

Trang 39

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>

Trang 40

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

Ngày đăng: 27/06/2014, 02:20

HÌNH ẢNH LIÊN QUAN

Bảng các style mở rộng (Extended style table) - Giáo Trình AutoIT cơ bản doc
Bảng c ác style mở rộng (Extended style table) (Trang 90)
Bảng ID đặc biệt - Giáo Trình AutoIT cơ bản doc
ng ID đặc biệt (Trang 107)
Bảng trạng thái - Giáo Trình AutoIT cơ bản doc
Bảng tr ạng thái (Trang 157)

TỪ KHÓA LIÊN QUAN

w