Kostenloses Tool zur Windows-Optimierung

Mit AutoIt Windows-Abläufe automatisieren

24.10.2014
Von  und
Thomas Bär, der seit Ende der neunziger Jahre in der IT tätig ist, bringt weit reichende Erfahrungen bei der Einführung und Umsetzung von IT-Prozessen im Gesundheitswesen mit. Dieses in der Praxis gewonnene Wissen hat er seit Anfang 2000 in zahlreichen Publikationen als Fachjournalist in einer großen Zahl von Artikeln umgesetzt. Er lebt und arbeitet in Günzburg.
Frank-Michael Schlede arbeitet seit den achtziger Jahren in der IT und ist seit 1990 als Trainer und Fachjournalist tätig. Nach unterschiedlichen Tätigkeiten als Redakteur und Chefredakteur in verschiedenen Verlagen arbeitet er seit Ende 2009 als freier IT-Journalist für verschiedene Online- und Print-Publikationen. Er lebt und arbeitet in Pfaffenhofen an der Ilm.

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.

So werden Programme unter Windows automatisiert: AutoIt kann Programme wie beispielsweise hier den Internet Explorer über die COM-Schnittstelle fernsteuern.
So werden Programme unter Windows automatisiert: AutoIt kann Programme wie beispielsweise hier den Internet Explorer über die COM-Schnittstelle fernsteuern.

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.