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" $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> 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 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 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ụ . 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. 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à 102 4 và 768 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