Logische Abfrage und Strukturen
Das Beispiel werden wir nun um eine logische Abfrage und die Verwendung einer Variablen ergänzen, was sehr einfach zu machen ist:
Opt("MustDeclareVars", 1)
dim $antwort
$antwort = MsgBox(68,"Und?","Sollen wir weitermachen?",5)
if $antwort = 6 then
msgbox(0,"","Es wurde 'ja' geklickt")
Else
msgbox(0,"","Es wurde nicht 'ja' geklickt")
endif
Dabei ist die Deklaration von Variablen mit Hilfe des DIM-Befehls in AutoIt optional. Im Sinne einer besseren Übersicht sollten Anwender doch immer die Deklaration verwenden. Alle Variablen sind grundsätzlich vom Typ Variant: Das heißt, dass sie jeden erdenklichen Wert annehmen können. Die Software kümmert sich selbstständig um die notwendige Typenumwandlung. Das ist zwar grundsätzlich recht praktisch, kann aber in einigen Fällen zu seltsamen Ergebnissen führen, die auf fehlerhafte Interpretationen der Werte durch die Software zu erklären sind. In älteren BASIC-Dialekten diente das Dollarsymbol typischerweise zur Deklaration von STRING-Variablen, bei AutoIt wird das Dollarzeichen generell für Variablen genutzt.
Das kleine Programm fragt den Benutzer ob der Vorgang fortgeführt werden soll und beendet die Wartezeit bis zur Beantwortung automatisch nach fünf Sekunden. Danach zeigt das Skript an, ob der Benutzer auf "JA" geklickt hat oder nicht. Der aus BASIC bekannte Befehl "option explicit", der den Einsatz von deklarierten Variablen erzwingt, existiert in abgewandelter Schreibeweise auch für AutoIt und heißt hier:
Opt("MustDeclareVars", 1).
Fügt der Anwender diesen Befehl an erster Stelle in das Skript ein, so bricht das Programm mit dem Hinweis auf die fehlende Deklaration ab, sofern darin eine undeklarierte Variable genutzt wird.
Automatisierung: AutoIt ruft Notepad
Eine ganz besondere Stärke von AutoIt liegt in den Fähigkeiten der Skript-Sprache, Windows-Programme zu automatisieren. Ein sehr einfaches Beispiel hierfür ist der Aufruf von Notepad und die Übergabe von Text an dieses Windows-Programm:
Run("notepad.exe")
WinWaitActive("Unbenannt - Editor")
Send("Diesen Text sendet AutoIt an Notepad.")
Der Befehl "WinWaitActive" ist in diesem Zusammenhang von besonderer Bedeutung, da das Skript auf diesem Weg darauf wartet, dass Windows das entsprechende Programm auch wirklich startete. Hier unterscheiden sich jedoch die verschiedenen Windows-Sprachversionen. Auf einem deutschsprachigen System heißt das Fenster "Unbenannt - Editor", auf einem englischsprachigen Windows würde das Fenster "Untitled - Notepad" heißen. Um dieses Problem zu umgehen wäre die einfachste Variante das Einsetzen eines Wartebefehls.
Run("notepad.exe")
sleep(1000)
Send("Diesen Text sendet AutoIt an Notepad.")
Der Befehl "Sleep" lässt das Skript eine benannte Anzahl von Millisekunden warten. Allerdings kann sich in diesem Fall das Benutzerverhalten zu Problem entwickeln: Klickt der Anwender im Verlauf der einen Sekunde irgendwo hin, so verlagert sich der Fokus an eine andere Stelle und das Senden des Texts geschieht eher unkontrolliert. Um auch dies zu verhindern existiert in AutoIt der Befehl "BlockInput". Er sorgt dann dafür, dass Windows Tastatureingaben und Mausbewegungen ignoriert. Dieser Befehl setzt allerdings voraus, dass das Skript mit Administrator-Rechten ausgeführt wird:
#RequireAdmin
BlockInput(1)
Run("notepad.exe")
sleep(1000)
Send("Diesen Text sendet AutoIt an Notepad.")
BlockInput(0)
Mehr Automatisierung: AutoIt ruft den Browser
Eine weitere Variante, die AutoIt zum Aufruf von Windows-Programmen anbietet, ist der Einsatz der COM-Schnittstelle. Da beispielsweise die Browser Google Chrome und Firefox nicht in der gleichen Art und Weise wie der Internet Explorer über die API zu erreichen sind, beschränkt sich das folgende Beispiel ausschließlich auf den Microsoft IE:
$ObjIE=ObjCreate("InternetExplorer.Application")
With $ObjIE
.Visible = True
.Navigate("http://www.google.de")
Do
Sleep(50)
Until .ReadyState = 4
EndWith
sleep(1000)
send("wie hoch ist der Mount Everest {ENTER}")
In diesem Skript fordert AutoIt Windows zur Erzeugung eines COM-Objekts auf. Der Befehl "with" erspart es dem Nutzer, wie in vielen anderen BASIC-artigen Dialekten auch, dass die folgenden Zeilen in der Form "$ObjIE.visible" ausgeschrieben werden müssen. Das Internet Explorer Objekt wird sichtbar gemacht und zur Navigation auf die Google-Webseite bewegt. Die Do-Until-Schleife sorgt dann dafür, dass der Skript-Job wartet, bis der Internet Explorer den Aufruf der Seite abgeschlossen hat. Anschließend wartet das Skript noch eine Sekunde und übergibt die Frage nach der Höhe des Bergs direkt an Google.