Loops are usually very alike, in that they will usually need a counter and a way to increment the counter on each successful loop execution. The thing that is different about the available loops in AutoIt is the syntax – in other words, the way you write the loops.
To create a Do Until loop, we will first delacre the count variable, this will be incremented on each loop execution.
Local $i = 0
Next we'll create the actual Loop, the until statement says that the loop should continue until the $counter equals 10, which will never happen as it is currently. I.e.
Do Until $counter = 10
For the counter to actually count, we will need to increment it, which can be done with the following piece of code.
$counter = $counter + 1
Do Until Example
Local $counter = 0 Do MsgBox(0, "Value of $i is:", $i) $counter = $counter + 1 Until $counter = 10
The while loop begins with the while keyword, followed by a statement – while the statement is false, the loop will continue running.
$counter = 0 While $counter <= 5 MsgBox(0, "Value of $counter is:", $counter) $counter = $counter + 1 WEnd
As you can see, the syntax reminds a lot of that in the Do Until example.
The For loop may feel a bit different, or harder to use for some – but as a rule of thumb, you should just remember that the statement is written immediately after the For keyword. Also, the counter is automatically incremented after each loop execution, which eliminates the line that would otherwise perform this task – somewhat simplifying the code.
For $counter = 1 to 10 MsgBox(0, "Counter: ", $counter) Next
Iterating Over Arrays and Objects
You can also use the For to loop trough arrays and objects, this can be done with the In keyword.
Local $aArray $aArray = "Hallo" $aArray = 0 $aArray = 1.9233 $aArray = "Another String" Local $string = "" For $element In $aArray $string = $string & $element & @CRLF Next MsgBox(0, "For..IN Arraytest", "Result is: " & @CRLF & $string)
You Iterate an object almost the exact same way as you would be handling an array. The following example will output your currently open windows in a message box.
Local $oShell = ObjCreate("shell.application") Local $oShellWindows = $oShell.windows If IsObj($oShellWindows) Then $string = "" For $Window In $oShellWindows $string = $string & $Window.LocationName & @CRLF Next MsgBox(0, "", "Your Current Open Shell Windows:" & @CRLF & $string) Else MsgBox(0, "", "You have no open Shell Windows.") EndIf