Thứ Bảy, 13 tháng 2, 2010

[AutoIT] Post dữ liệu tới 1 website

Dùng cái này spam chắc đc. Hix!

$oMyError = ObjEvent("AutoIt.Error","MyErrFunc") ; Install a custom error handler
$ResolveTimeout = 5000
$ConnectTimeout = 5000
$SendTimeout = 5000
$ReceiveTimeout = 5000
$sUrl = "http://localhost/sp/test.php"
$PostData = "name=justin"
$oHttpRequest = ObjCreate("MSXML2.ServerXMLHTTP")
$oHttpRequest.Open ("POST", $sUrl,True)
$oHttpRequest.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded") ; Need to change as per your webpage
$oHttpRequest.setRequestHeader ("Connection", "Keep-Alive")
$oHttpRequest.Send ($PostData)
sleep(1000)
$oHttpRequest = ""


[AutoIT] Nghịch 1 chút

Đoạn mã này sẽ thực hiện chức năng Buzz liên tục khi bấm phím \, nhớ bấm phím \ lại để dừng

HotKeySet("","Buzz")
$B = False
While 1
If $B = True Then
Send("^g")
Sleep(100)
MouseMove(Random(0,1024),Random(0,768),1)
EndIf
WinClose("Windows Task Manager")
Wend

Func Buzz()
$B = Not $B
If $B = False Then Exit
EndFunc



Lập trình Autolt – Cái nhìn tổng quan

AutoIt là gì? Nó có được coi là một ngôn ngữ lập trình ko? Đó là câu hỏi thường được nhắc đi nhắc lại.

AutoIt là một ngôn ngữ dễ học, dễ sử dụng, giúp người dùng có thể thực thi những công việc mình thường phải làm trên máy tính một cách tự động. Bằng cách giả lập các phím bấm, các nút click chuột, cùng với khả năng tương tác với các cửa sổ, các chương trình, các file trong máy tính… AutoIt có thể làm được rất nhiều việc. Nhỏ, nhẹ, thậm chí có thể ko cần cài đặt, khả năng tương thích cao (từ Win 95 đến Win 2k3) và khả năng xuất ra file exe đã khiến AutoIt trở nên thông dụng và ngày càng được nhiều người biết đến.

1. Giới thiệu về AutoIt. Lịch sử phát triển

AutoIt là gì? Nó có được coi là một ngôn ngữ lập trình ko? Đó là câu hỏi thường được nhắc đi nhắc lại.

AutoIt là một ngôn ngữ dễ học, dễ sử dụng, giúp người dùng có thể thực thi những công việc mình thường phải làm trên máy tính một cách tự động. Bằng cách giả lập các phím bấm, các nút click chuột, cùng với khả năng tương tác với các cửa sổ, các chương trình, các file trong máy tính… AutoIt có thể làm được rất nhiều việc. Nhỏ, nhẹ, thậm chí có thể ko cần cài đặt, khả năng tương thích cao (từ Win 95 đến Win 2k3) và khả năng xuất ra file exe đã khiến AutoIt trở nên thông dụng và ngày càng được nhiều người biết đến.

Riêng ở VN, AutoIt được biết đến thông qua hàng loạt những “virus” phát tán qua YM Có thể nói đây là một “hướng đi” khác của các chương trình viết bằng AutoIt, góp phần ko nhỏ khiến cho ngày càng nhiều các công cụ anti-virus nhận diện chương trình viết bằng AutoIt là virus, bất luận mục đích thực sự của những chương trình này là tốt hay xấu.

Ban đầu, các file mã nguồn AutoIt mang đuôi .ini (AutoIt 1), sau chuyển sang .aut (AutoIt 2) và giờ là .au3 (AutoIt 3). Mã nguồn chương trình AutoIt từ chỗ khá rắc rối (phiên bản 2) đã trở nên cực kỳ đơn giản và dễ hiểu (phiên bản 3), do khá gần gũi với ngôn ngữ BASIC. Cũng nên nói thêm một chút, trong quá trình đi từ AutoIt 2 lên AutoIt 3, một lập trình viên trong nhóm phát triển AutoIt đã quyết định tách ra thực hiện một dự án mới, mang lại nhiều tính năng mạnh mẽ thậm chí còn hơn AutoIt – tuy vậy cú pháp ngôn ngữ này cực kỳ phức tạp và khó hiểu , ko trong sáng như AutoIt 3.

AutoIt có thể được tải về từ trang chủ AutoItScript

2. Những công cụ cần dùng để viết các chương trình bằng AutoIt

Hiển nhiên, trước tiên bạn cần có AutoIt.

AutoIt được phân phối ở 2 dạng: Installer và ZIP. Phiên bản mới nhất là 3.2.0.1.

Ở dạng Installer, bạn sẽ down về một file exe: autoit-v3.2.0.1-setup.exe – bộ cài của AutoIt. Down bộ cài đồng nghĩa với việc bạn sẽ có thêm nhiều tiện ích khi sử dụng AutoIt. Ví dụ, khi bạn kích chuột phải vào 1 file .au3, sẽ có tùy chọn cho phép bạn chạy script / sửa script bằng editor…

Còn dạng ZIP: autoit-v3.2.0.1.zip – dạng này cho phép bạn sử dụng AutoIt ở bất cứ đâu mà ko cần phải cài đặt (tạo rác trong registry). Đây chính là bản portable mà bạn có thể đặt trong USB stick của mình

Để soạn thảo file .au3, bạn có thể dùng bất cứ trình soạn thảo nào, thậm chí là Notepad của Windows Nếu muốn pzo hơn, có tính năng highlight code, chạy thử code bằng cách bấm F5… bạn có thể sử dụng SciTE. Đây là bản SciTE đã được sửa đổi để giúp bạn trong quá trình sử dụng AutoIt.

Hoặc, bạn có thể dùng Textpad, Crimson Editor hay PSPad để viết các chương trình AutoIt. Các file syntax dành cho 3 trình soạn thảo này được kèm trong thư mục Extras\Editors của AutoIt.

Sau khi tiến hành cài đặt / giải nén AutoIt, bạn sẽ thấy một số file quan trọng nằm trong thư mục này và các thư mục con:

AutoIt3.exe – Công cụ dùng để chạy các mã nguồn viết bằng AutoIt
Aut2Exe.exe – Công cụ biên dịch file .au3 thành .exe để phân phối
Exe2Aut.exe – Công cụ dịch ngược file .exe (viết bằng AutoIt – hiển nhiên) về .au3
Au3Info.exe – Công cụ cho biết thông tin về các cửa sổ trên màn hình
Còn khá nhiều file khác, tuy nhiên trên đây là những công cụ cần thiết nhất.

3. Ngôn ngữ AutoIt qua cái nhìn khái quát

Làm thế nào để biết cách sử dụng và làm chủ sức mạnh của AutoIt?

Câu trả lời hết sức đơn giản: Tham khảo file Help + Forum của AutoIt.

Tất cả những j` cần thiết đều đã được trình bày một cách kỹ càng và đầy đủ trong file Help của AutoIt. Ở đây sẽ chỉ dẫn ra những điểm quan trọng nhất về ngôn ngữ AutoIt.

3.1. Cấu trúc file .au3

Một file script viết bằng AutoIt có định dạng .au3

File au3 này bao gồm các dòng lệnh, ví dụ như sau:

; This is my second script (with functions)
MsgBox(0, “My second script!”, “Hello from the main script!”)
TestFunc() Func TestFunc()
MsgBox(0, “My Second Script!”, “Hello from the functions!”)
EndFunc

Như bạn có thể thấy, dòng đầu tiên là một chú thích, được đặt sau dấu ;. Nếu chú thích dài nhiều dòng, bạn có thể đặt trong khối #cs – #ce:

#cs
Comment goes here
Line 1
Line 2
#ce

3.2. Biến trong AutoIt

Trong AutoIt, các biến bắt đầu bằng dấu $, giống như ngôn ngữ PHP. Biến có thể được khai báo bằng các từ khóa Dim, Local hay Global:

Dim $var1, $myvariable

Hoặc, bạn có thể dùng trực tiếp biến mà ko cần khai báo:

$var1 = “create and assign”

AutoIt hiển nhiên cũng hỗ trợ mảng nhiều chiều. Bạn chỉ việc sử dụng chúng cùng với chỉ số đặt trong dấu ngoặc vuông. Ví dụ:

$Array[1]=”A”
$Array[1][1]=”Upper-Left”

3.3. Các kiểu dữ liệu

AutoIt gồm các kiểu dữ liệu: Số; Xâu (hay chuỗi); Logic; Xâu nhị phân.

Dữ liệu kiểu số có thể là số nguyên (10, -6) hay số thực (3.334, 1.4e5) hay thậm chí ở dạng Hex (0×4FFFF, 0×409 – bắt đầu bằng 0x)

Dữ liệu kiểu xâu (chuỗi) được đặt trong dấu nháy đơn / nháy kép:

‘This “sentence” contains “lots” of “double-quotes” does it not?’

Dữ liệu kiểu logic có 1 trong 2 giá trị: true hoặc false:

$Boolean1 = true
$Boolean2 = false

Cuối cùng, kiểu xâu nhị phân là xâu bao gồm ký tự chr(0):

$bin = “abc” & chr(0) & “def”
$bin = BinaryString(”abc”)

3.4. Các toán tử

Cũng như các ngôn ngữ lập trình khác, AutoIt có các toán tử quen thuộc: +, -, *, /, ^…

Hoàn toàn có thể sử dụng các toán tử như +=, -=, *=, /=

Với kiểu logic, AND, OR và NOT là các toán tử hợp lệ.

3.5. Cấu trúc điều khiển

Có 3 loại cấu trúc điều khiển trong AutoIt:

If…ElseIf…Else…EndIf
Select…Case…EndSelect
Switch…Case…EndSwitch
Cấu trúc If…ElseIf…Else…EndIf kiểm tra điều kiện, sau đó thực thi các lệnh:

If StringIsXDigit ($var) Then
MsgBox(4096,””, “Value might be hexadecimal!”)
Else
MsgBox(4096,””, “Value is either a string or is zero.”)
EndIf
EndIf

Cấu trúc Select…Case sử dụng trong trường hợp cấu trúc If trở nên rườm rà:

Select
Case $var = 1
MsgBox(0, “”, “First Case expression was true”)
Case $var2 = “test”
MsgBox(0, “”, “Second Case expression was true”)
Case Else
MsgBox(0, “”, “No preceding case was true!”)
EndSelect

Cấu trúc Switch…Case…EndSwitch hoàn toàn tương tự, tuy nhiên nó tiến bộ ở chỗ cho phép bạn chỉ rõ khoảng giá trị cần kiểm tra:

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
$msg = “What are you still doing up?”
EndSwitch

3.6. Các vòng lặp

Các loại vòng lặp trong AutoIt gồm có:

For…Next
While…WEnd
Do…Until
With…Endwith
For…In…Next
For…Next được sử dụng để lặp từ giá trị ban đầu đến giá trị kết thúc, theo bước nhảy định sẵn:

For $i = 5 to 1 Step -1
MsgBox(0, “Count down!”, $i)
Next
MsgBox(0,””, “Blast Off!”)

While…WEnd và Do…Until tương tự như While…Do và Repeat…Until của Pascal:

$i = 0
While $i < 10
MsgBox(0, “Value of $i is:”, $i)
$i = $i + 1
WEnd$i = 0
Do
MsgBox(0, “Value of $i is:”, $i)
$i = $i + 1
Until $i = 10With…EndWith dùng với các đối tượng, giúp tiết kiệm công sức khi gõ:$oExcel = ObjCreate(“Excel.Application”)
$oExcel.visible =1
$oExcel.workbooks.addWith $oExcel.activesheet
.cells(2,2).value = 1
.range(”A1:B2″).clear
Endwith
$oExcel.quit

Tương tự, bằng cách sử dụng For…In…Next, ta có thể duyệt qua tất cả mảng / tập các đối tượng:

FOR $element IN $aArray
$string = $string & $element & @CRLF
NEXT

3.7. Hàm

Hàm trong AutoIt được định nghĩa bằng cách dùng khối Func…EndFunc:

Func MyDouble($value)
$value = $value * 2
Return $value
EndFunc

Sử dụng hàm cũng rất đơn giản:

$val = 10
For $i = 1 To 10
$doubled = MyDouble($val)
MsgBox(0, “”, $val & ” doubled is ” & $doubled)
$val = $doubled
Next

4. Sử dụng các hàm built-in của AutoIt

Đây có thể coi là yếu tố tạo nên 80% sức mạnh của AutoIt. AutoIt bao gồm một số lượng lớn các hàm built-in, với tính năng trải rộng từ Quản lý file, thư mục đến quản lý các process, từ tương tác với registry đến giả lập các phím bấm…

Nói chung, các hàm này đã được liệt kê và hướng dẫn hết sức chi tiết về cách sử dụng trong file Help của AutoIt, do đó việc kể tên ra đây là vô nghĩa và ko cần thiết.

Hãy thử ví dụ với script sau, được dùng để tự động hóa quá trình cài đặt WinZip – giả lập bàn phím và gửi các phím cần thiết tới trình cài đặt:

; Run the winzip installer
Run(”winzip90.exe”); Initial Setup Screen
WinWaitActive(”WinZip® 9.0 SR-1 Setup”, “&Setup”)
Send(”!s”); Install location
WinWaitActive(”WinZip Setup”, “into the following folder”)
Send(”{ENTER}”)

; Features overview
WinWaitActive(”WinZip Setup”, “WinZip features include”)
Send(”!n”)

; License agreement
WinWaitActive(”License Agreement”)
Send(”!y”)

; Quick start
WinWaitActive(”WinZip Setup”, “Quick Start Guide”)
Send(”!n”)

; Choose interface
WinWaitActive(”WinZip Setup”, “switch between the two interfaces”)
Send(”!c”)
Send(”!n”)

; Installation type (custom/express)
WinWaitActive(”WinZip Setup”, “&Express setup (recommended)”)
Send(”!e”)
Send(”!n”)

; Select file associations
WinWaitActive(”WinZip Setup”, “WinZip needs to associate itself with your archives”)
Send(”!n”)

; Completed installation screen
WinWaitActive(”WinZip Setup”, “Thank you for installing this evaluation version”)
Send(”{ENTER}”)

; Wait for winzip to load then close it
WinWaitActive(”WinZip (Evaluation Version)”)
WinClose(”WinZip (Evaluation Version)”) Hoặc, vài ba lệnh dùng để tương tác với registry: ; Write a single REG_SZ value
RegWrite(”HKEY_LOCAL_MACHINE\SOFTWARE\Test”, “TestKey”, “REG_SZ”, “Hello this is a test”) ; Write the REG_MULTI_SZ value of “line1″ and “line2″
RegWrite(”HKEY_LOCAL_MACHINE\SOFTWARE\Test”, “TestKey1″, “REG_MULTI_SZ”, “line1″ & @LF & “line2″)Một lời khuyên duy nhất: Bạn chỉ cần file Help + Forum của AutoIt để làm mọi thứ5. Các hàm do người dùng tự định nghĩa

Các hàm này, nằm trong các file au3 được phân phối kèm với AutoIt. Điểm phân biệt hàm này với các hàm built-in là ở tên của hàm – Hàm tự định nghĩa thường có dấu gạch dưới ở trước tên, hàm built-in thì ko.

Để sử dụng các hàm tự định nghĩa, bạn cần include file mã nguồn của hàm vào script mình đang thực hiện. Ví dụ:

#include
MsgBox(0,”Today”,”Today’s date is ” & Now())

Số lượng hàm tự định nghĩa rất nhiều và có thể được lấy về từ autoitscript.com

6. GUI

6.1. Thiết kế GUI

Nếu như các script viết bằng AutoIt có thể hoạt động một cách hoàn toàn âm thầm, nghĩa là click và chạy mà người dùng ko biết gì (mở ngoặc: giống “virus” YM nhờ), thì đôi khi bạn lại muốn tạo một GUI cho script cho giống một soft hoàn chỉnh.

Khả năng tạo GUI trong AutoIt góp phần làm cho nó trở nên phổ biến và tiện dụng hơn.

Trong GUI, bạn có thể tạo label, button, checkbox, radiobox, list, progress bar, context menu… nói chung là tất tần tật những j` mà một GUI có thể có.

Để tạo một ứng dụng có GUI, bạn có thể tạo bằng cách tự viết code lấy – Cái này chả khác j` với việc làm đồ họa bằng Pascal. Phải căn ke từng mili trên màn hình, sửa đổi vị trí cho hợp nhãn,… túm lại là rất phiền

Thử ví dụ một GUI cho dễ hình dung nhé:

; GUI
GuiCreate(”Sample GUI”, 400, 400)
GuiSetIcon(@SystemDir & “\mspaint.exe”, 0); MENU
GuiCtrlCreateMenu(”Menu&One”)
GuiCtrlCreateMenu(”Menu&Two”)
GuiCtrlCreateMenu(”MenuTh&ree”)
GuiCtrlCreateMenu(”Menu&Four”); CONTEXT MENU
$contextMenu = GuiCtrlCreateContextMenu()
GuiCtrlCreateMenuItem(”Context Menu”, $contextMenu)
GuiCtrlCreateMenuItem(””, $contextMenu) ;separator
GuiCtrlCreateMenuItem(”&Properties”, $contextMenu)

; PIC
GuiCtrlCreatePic(”logo4.gif”,0,0, 169,68)
GuiCtrlCreateLabel(”Sample pic”, 75, 1, 53, 15)
GuiCtrlSetColor(-1,0xffffff)

; AVI
GuiCtrlCreateAvi(”sampleAVI.avi”,0, 180, 10, 32, 32, $ACS_AUTOPLAY)
GuiCtrlCreateLabel(”Sample avi”, 170, 50)

; GUI MESSAGE LOOP
GuiSetState()Một cách khác, thuận tiện hơn, đó là sử dụng một soft dạng GUI Builder. Có nhiều GUI Builder dành cho AutoIt, nhưng theo quan điểm cá nhân, có lẽ Koda là khá nhất. Công cụ này có thể tại về từ trang web này.Phiên bản mới nhất là 1.6, cập nhật ngày 19/9.

Koda cho phép bạn dễ dàng tạo GUI chỉ bằng cách drag-and-drop vào form, sau đó sẽ tự động sinh code AutoIt để bạn đưa vào script của mình. Rất rất tiện lợi nếu so sánh với việc code từ đầu bằng tay.

6.2. Gắn GUI với code

Có GUI rồi, là đến lúc bạn muốn gắn nó với các mã AutoIt thực thi các lệnh đã viết từ trước.

AutoIt hỗ trợ 2 chế độ tương tác với GUI: OnEvent và MessageLoop. Có thể đảo qua lại 2 chế độ bằng cách dùng lệnh:

Opt(“GUIOnEventMode”, 1)

Ở chế độ OnEvent, ta sẽ gắn từng “sự kiện” với một hàm tương ứng. Ví dụ, ta gắn “sự kiện” người dùng click nút Close với hàm Close():

GUISetOnEvent($GUI_EVENT_CLOSE, “CLOSE”)
Func CLOSE()
MsgBox(0, “GUI Event”, “You clicked CLOSE! Exiting…”)
Exit
EndFunc

Ở chế độ MessageLoop, ta có một cách tiếp cận hoàn toàn khác. AutoIt sẽ tạo một vòng lặp vô hạn, liên tục kiểm tra xem có sự kiện nào xảy ra với GUI ko – thông qua một hàm mang tên GUIGetMsg.

Toàn bộ việc gắn code với GUI được thực hiện qua một vòng lặp While:

While 1
$msg = GUIGetMsg() Select
Case $msg = $GUI_EVENT_CLOSE
MsgBox(0, “GUI Event”, “You clicked CLOSE! Exiting…”)
ExitLoop
EndSelect
WEnd 7. Chạy thử, biên dịch, đóng gói và phân phối

Có script hoàn chỉnh. Có GUI hoàn hảo. Đó là lúc bạn nghĩ đến việc tiếp theo. Phân phối tới càng nhiều người càng tốt (nhưng đừng dùng cách phát tán qua YM nhé )

Để chạy script viết bằng AutoIt, bạn hãy mở file AutoIt3.exe và chọn đến file .au3 tương ứng.

Để biên dịch thành file exe và đem đi phân phối, bạn cần đến công cụ Aut2Exe. Bạn cần chỉ định file mã nguồn, tên exe sẽ tạo, icon (nếu thích) và bấm Convert.

Nếu bạn muốn mình có thể dịch ngược từ exe về au3 trong trường hợp đánh mất file .au3 gốc , hãy chọn Allow decompilation và gõ vào password của mình. Pass này sẽ dùng để tránh người khác dịch ngược file script của bạn.

Nếu để ý kỹ, bạn sẽ thấy khi kích phải chuột vào file exe đã tạo + chọn properties, sẽ có thông tin File Version là phiên bản của AutoIt. Bạn rất có thể sẽ muốn loại bỏ thông tin này + đưa thông tin của riêng mình vào cho personal

Điều đó hoàn toàn có thể thực hiện được khi bạn dùng Resource Editor.

Tuy nhiên, nếu cố edit file exe đã biên dịch, bạn sẽ thấy mình phí công vô ích, bởi file exe mới sẽ ko hoạt động

Hãy edit file AutoItSC.bin cùng thư mục với Aut2Exe.exe với những thông tin mà bạn thích, sau đó mới tiến hành biên dịch. Lần này, kết quả sẽ như mong đợi

Bạn sẽ có một file .exe của riêng mình, với icon tùy ý, info ở mục properties tùy ý.

8. Kết luận

Đây là Phần cuối trong loạt bài AutoIt – Cái nhìn tổng quan.

Hãy coi đây là cái nhìn chung nhất về AutoIt, về ngôn ngữ AutoIt, các công cụ đi kèm, những thứ cần thiết, những điều mà bạn có thể quan tâm…

(Siêu tìm)

[AutoIT] Cấu trúc lặp

While…WEnd

Cấu trúc lặp này sẽ hoạt động dựa trên việc kiểm tra biến $var, nên ta cần tạo biến này trước khi cấu trúc được thực thi. Và mình sẽ bỏ qua việc kiểm tra xem Người Dùng có bấm Cancel hay không để cho nó đơn giản, như thế việc bấm Cancel tương đương với việc nhập Chuỗi hoặc 0.

Dim $var=0 ;Khởi tạo biến $var để vòng lặp được thực thi

While $var=0 ;Kiểm tra giá trị của $var
___$var=InputBox(“Nhập Số”,”Hãy nhập một số gì đó, trừ số 0 và Chuỗi”,7,” M7″)
___If $var=0 Then MsgBox(0,”Khoanh Vùng”,”Bạn đã nhập Chuỗi hoặc số 0″)
;~__Exit ;Bỏ Từ khóa này để chương trình không thoát
WEnd

Switch $var ;Kiểm tra biến $var
___Case -9999999 To -1
______MsgBox(0,”Khoanh Vùng”,”Bạn đã nhập số Âm”)
___Case 1 To 9
______MsgBox(0,”Khoanh Vùng”,”Số có 1 chữ số”)
___Case 10 To 99
______MsgBox(0,”Khoanh Vùng”,”Số có 2 chữ số”)
___Case 100 To 999
______MsgBox(0,”Khoanh Vùng”,”Số có 3 chữ số”)
___Case 1000 To 9999
______MsgBox(0,”Khoanh Vùng”,”Số có 4 chữ số”)
___Case 10000 To 99999
______MsgBox(0,”Khoanh Vùng”,”Số có 5 chữ số”)
___Case 100000 To 999999
______MsgBox(0,”Khoanh Vùng”,”Số có 6 chữ số”)
___Case 1000000 To 9999999
______MsgBox(0,”Khoanh Vùng”,”Số có 7 chữ số”)
EndSwitch


Cấu trúc lặp sẽ hoạt động cho đến khi nào biến $var khác 0 tức là khi $var=0 nó sẽ lặp mãi, việc kiểm tra này tương tự như việc kiểm tra của If ở bài trước, khi $var có giá trị là chuỗi vẫn tương đương với $var=0.

Do…Until:

Do
___$var=InputBox(“Nhập Số”,”Hãy nhập một số gì đó, trừ số 0 và Chuỗi”,7,” M7″)
___If $var=0 Then MsgBox(0,”Khoanh Vùng”,”Bạn đã nhập Chuỗi hoặc số 0″)
Until $var<>0 ;Thay đổi Phương Thức kiểm tra

Switch $var ;Kiểm tra biến $var
___Case -9999999 To -1
______MsgBox(0,”Khoanh Vùng”,”Bạn đã nhập số Âm”)
___Case 1 To 9
______MsgBox(0,”Khoanh Vùng”,”Số có 1 chữ số”)
___Case 10 To 99
______MsgBox(0,”Khoanh Vùng”,”Số có 2 chữ số”)
___Case 100 To 999
______MsgBox(0,”Khoanh Vùng”,”Số có 3 chữ số”)
___Case 1000 To 9999
______MsgBox(0,”Khoanh Vùng”,”Số có 4 chữ số”)
___Case 10000 To 99999
______MsgBox(0,”Khoanh Vùng”,”Số có 5 chữ số”)
___Case 100000 To 999999
______MsgBox(0,”Khoanh Vùng”,”Số có 6 chữ số”)
___Case 1000000 To 9999999
______MsgBox(0,”Khoanh Vùng”,”Số có 7 chữ số”)
EndSwitch

Không như While…WEnd, Do…Until sẽ thực hiện các câu lệnh trong vòng lặp của mình trước rồi mới kiểm tra điều kiện lặp, bằng chứng là tụi mình không cần khởi tạo biến $var ở ngoài mà vòng lặp vẫn kiểm tra được.
Các bạn mới làm quen với lập trình cần chú ý cách mà 2 vòng lặp này kiểm tra điều kiện, đối với While…WEnd thì $var bằng 0 còn với Do…Until thì $var phải khác 0

Mở Rộng While…WEndDo…Until

Các vòng lặp thường được sử dụng rất nhiều trong thực tế, một trong số đó là các vòng lặp kiểm tra mật khẩu… điều mình muốn nói ở đây là không phải vòng lặp nào cũng chạy mãi nếu Người Dùng cứ nhập sai. Đôi khi Người Dùng chủ được phép nhập 1 số lần nhất định nào đó rồi thôi, lúc ấy vòng lặp sẽ ngưng và tự thoát ra dù điều kiện vẫn chưa thõa.

While…WEndDo…Until hoàn toàn có thể đáp ứng được vấn đề mà mình đặt ra ở trên bằng cách dùng cấu trúc If để kiểm tra 1 biến đếm, rồi ép cho điều kiện thoát vòng lặp được thõa mãn.

Dim $var=0 ;Khởi tạo biến $var để vòng lặp được thực thi
Dim $count=0 ;Khởi tạo biến đếm

While $var=0 ;Kiểm tra giá trị của $var
___$count+=1 ;Tăng biến đếm lên 1 đơn vị
___$var=InputBox(“Nhập Số”,”Hãy nhập một số gì đó, trừ số 0 và Chuỗi”,7,” M7″)
___If $var=0 Then MsgBox(0,”Khoanh Vùng”,”Bạn đã nhập Chuỗi hoặc số 0″)
___If $count=7 Then Exit ;Khi $count=7 thoát chương trình luôn
WEnd

Nếu hiểu theo một nghĩa khác thì việc kiểm tra biến đếm bằng cấu trúc If thật chất là một điều kiện thoát thứ 2 của vòng lặp, như thế với sự kết hợp các cấu trúc Rẽ Nhánh (không riêng gì If) ta sẽ có nhiều đều kiện thể thoát vòng lặp. Ví dụ của tụi mình sẽ được thay đổi 1 chút để phù hợp với mô tả…

Do
___$var=InputBox(“Nhập Số”,”Hãy nhập một số gì đó, trừ số 0 và Chuỗi”,7,” M7″)
___If $var=0 Then MsgBox(0,”Khoanh Vùng”,”Bạn đã nhập Chuỗi hoặc số 0″)

___Switch $var ;Kiểm tra biến $var
______Case -9999999 To -1
_________MsgBox(0,”Khoanh Vùng”,”Bạn đã nhập số Âm”)
_________Exit
______Case 1 To 9
_________MsgBox(0,”Khoanh Vùng”,”Số có 1 chữ số”)
_________Exit
______Case 10 To 99
_________MsgBox(0,”Khoanh Vùng”,”Số có 2 chữ số”)
_________Exit
______Case 100 To 999
_________MsgBox(0,”Khoanh Vùng”,”Số có 3 chữ số”)
_________Exit
______Case 1000 To 9999
_________MsgBox(0,”Khoanh Vùng”,”Số có 4 chữ số”)
_________Exit
______Case 10000 To 99999
_________MsgBox(0,”Khoanh Vùng”,”Số có 5 chữ số”)
_________Exit
______Case 100000 To 999999
_________MsgBox(0,”Khoanh Vùng”,”Số có 6 chữ số”)
_________Exit
______Case 1000000 To 9999999
_________MsgBox(0,”Khoanh Vùng”,”Số có 7 chữ số”)
_________Exit
___EndSwitch
Until False ;Với False cấu trúc sẽ lặp mãi

Trong ví dụ này điều kiện thoát của Do…Until chỉ là False, như thế vòng lặp sẽ hoạt động mãi và điều kiện để thoát là những trường hợp của Cấu Trúc Switch


Chúc mừng năm mới 2010


CHÚC NĂM MỚI 2010
- Vừa đủ HẠNH PHÚC để giữ tâm hồn bạn được ngọt ngào. - Vừa đủ THỬ THÁCH để giữ bạn luôn kiên nhẫn. - Vừa đủ MUỘN PHIỀN để giữ bạn thật sự là Man. - Vừa đủ HY VỌNG để cho bạn được hạnh phúc. - Vừa đủ THẤT BẠI để bạn mãi khiêm nhường. - Vừa đủ THÀNH CÔNG để giữ bạn mãi nhiệt tâm. - Vừa đủ BẠN BÈ để bạn được an ủi. - Vừa đủ VẬT CHẤT để đáp ứng các nhu cầu vật chất của bạn. - Vừa đủ NHIỆT TÌNH để bạn cho đời thêm hân hoan. - Vừa đủ NIỀM TIN để xua tan những thất vọng.