Kostenloses Tool zur Windows-Optimierung

Mit AutoIt Windows-Abläufe automatisieren

24.10.2014 von Thomas Bär und Frank-Michael Schlede
Skripte selbst entwickeln - eine Aufgabe nur für erfahrene Programmierer? Die Freeware AutoIt beweist, dass das nicht so sein muss. Wir zeigen, wie Sie schnell mit AutoIt Windows-Aufgaben automatisieren.

Für den "normalen" Anwender gehört weder das Programmieren noch das Erstellen von Skripten zu den Aufgaben, die er täglich an seinem PC erledigt. Aber gerade engagierte Nutzer, die sich etwas eingehender mit den Funktionen und Abläufen auf ihren Windows-Systemen befassen wollen oder müssen, suchen häufig nach einer Möglichkeit, die Abläufe auf den Windows-Systemen zu automatisieren. Doch die normalen Batch-Dateien bieten in der Regel zu wenig Komfort, während sich gerade Einsteiger häufig durch den objektorientierten Ansatz der PowerShell schnell überfordert füllen.

Die Entwickler der freien Software AutoIt haben sich genau dieser Punkte angenommen und stellen eine Lösung zur Verfügung, die es auch Einsteigern schnell und einfach möglich macht, Windows-Systemen und deren Funktionen zu automatisieren. Unser Workshop zeigt, wie Sie diesen Einstieg mühelos bewältigen können.

AutoIt: Eine Freeware mit vielen Vorteilen

Bei AutoIt handelt es sich um eine Skript-Sprache, deren Syntax von den Entwicklern möglichst nahe an die der Programmiersprache BASIC angelehnt wurde. Damit sollte für viele Anwender bereits eine Hürde genommen sein, denn sehr viele von ihnen werden schon mal ein Skript oder ein paar Zeilen Code in dieser Sprache, deren Logik sich leicht erschließt, erstellt oder verwendet haben.

Die freie Wahl des Tools: Ein Benutzer kann AutoIt-Skripte mit jedem beliebigen Editor bearbeiten.

Im Vergleich zu anderen Skriptsprachen liegt aber ein Hauptvorteil von AutoIt in der Fähigkeit der Software, aus dem jeweiligem Skript ein eigenständiges EXE-Programm zu kompilieren. Ein auf diese Weise mit AutoIt erzeugtes Programm kann der Anwender direkt weitergeben, ohne dass er sich Gedanken darum machen muss, ob AutoIt selbst oder gar eine besondere Runtime-Umgebung auf dem Ziel-PC installiert ist. Grundsätzlich ist die Software in der Lage Tastenanschläge oder Mausklicks zu emulieren, auch und insbesondere in Abhängigkeit von Ereignissen oder anderen Prozessen. Eine überaus mächtige Entwicklungsumgebung, die zudem noch kostenlos zum Download für faktisch alle gängigen Windows-Versionen zur Verfügung steht.

Über ein einfaches GUI-Konzept bietet AutoIt dem Nutzer die Erstellung von Oberflächen wie Eingabeboxen oder Nachrichtenfenster an. Ihm stehen dabei aber auch praktische Hilfsmittel wie eine Monatsauswahl ("Datepicker") zur Verfügung. Da AutoIt zudem Funktionen der WinAPI nutzen kann, das COM (Component Object Modelling) unterstützt und Funktionen aus Win32-DLLs aufruft, sind die Möglichkeiten der Freeware extrem umfangreich. Ein Blick in das deutschsprachige Forum zeigt, dass selbst Computerspiele wie eine Adaption von Super Mario mit Hilfe von AutoIt entwickelt werden können. Verschiedene Add-Ons wie beispielsweise der SciTE Editor mit Syntax-Highlighting oder der KODA Form Designer, der die Erstellung aufwändigerer Oberflächen ermöglicht, helfen bei der Erstellung von eigenen Programmen.

Installation und das erste Programm

Die Installation wird durch einen Assistenten unterstützt und umfasst alle notwendigen Programmelemente in einem gerade einmal 11 MByte großen Download-Archiv. Für diese Installation muss der Anwender lediglich festlegen, ob beim Standardaufruf die x86-Variante oder die x64-Ausprägung der Tools zur Anwendung kommen soll. Im Dialogfenster des Installationsprograms wird allerdings dringend die Nutzung der x86-Variante empfohlen. Eine englischsprachige Online-Hilfe im .CHM-Format installiert der Setup-Agent ebenfalls mit auf das Windows-System.

Zwar können Anwender ihre AutoIt-Skripte, die standardmäßig die Erweiterung ".AU3" besitzen, auch mit einem herkömmlichen Editor bearbeiten, doch müssen sie in diesem Fall auf die Autovervollständigung, das Syntax-Highlighting und auf die recht brauchbaren Rückmeldungen der Fehlerprüfung verzichten, die der beim Programm mitgelieferte Editor SciTE-Lite bieten kann. Insgesamt beschränkt sich sein Oberfläche auf die notwendigen Befehle und Strukturen. Dazu gehören Zeilennummern, Kompilierungs-Befehle und Optionen, Druckbefehl, Lesezeichen, Suchen/Ersetzen oder das block- beziehungsweise zeilenweises Auskommentieren. Grundsätzlich kann der Benutzer jederzeit über das Windows-Kontextmenü aus einer ".AU3"-Datei eine kompilierte EXE-Datei erzeugen, das entsprechende Skript bearbeiten oder auch starten.

Sehr praktisch und direkt bei der Installation mit dabei: Der Editor SciTE-Lite verfügt unter anderem auch über Syntax-Highlighting.

Wie es sich in der IT-Welt gehört, gilt das erste Programm der Begrüßung der Welt. Wer mittels AutoIt ein "Hallo Welt" auf dem Bildschirm ausgeben möchte, muss dazu lediglich eine Codezeile schreiben:

MsgBox(0,"","Hallo Welt")

An dieser Stelle lernt der Nutzer gleich eine Eigenheit des SciteTE-Editors in der Zusammenarbeit mit AutoIt kennen, die diese Software von anderen Entwicklungsumgebungen deutlich unterscheidet: Drückt er nach Eingabe eines Skripts auf die Taste F5 oder klickt im Menü Tools auf den entsprechenden Befehl, um so den soeben eingegebenen Code zu starten, so wird er zunächst verwundert feststellen, dass es so nicht funktioniert. Er muss AutoIt-Skripte zunächst in einer Datei speichern, da der Editor den Aufruf zur Kompilierung direkt an AutoIt weitergibt. Liegt das Skript dann erst einmal als Datei vor, kann dann Anwender es dann auch problemlos starten.

Um das Beispiel verständlicher werde zu lassen, gleich einige Anmerkungen zur Syntax: Im Aufruf legt die erste Null hinter der Klammer fest, in welcher Form das Dialogfenster angezeigt wird. Der Wert Null steht dabei für "OK only". Wird sie durch den Wert Eins ersetzt, so stellt das Fenster dem Nutzer am Bildschirm die Schaltflächen "OK" und "Abbrechen" zur Verfügung. Eine Auflistung aller Werte für dieses sogenannte "Flag" stellt die Online-Hilfe zur Verfügung, die der Anwender im Programmcode kontextsensitiv durch die Taste F1 aufrufen kann. So erklärt sich auch recht leicht, dass der Aufruf:

MsgBox(64,"","Hallo Welt",5)

das Dialogfenster nun mit einem Info-Symbol schmückt und dass sich dieses nach fünf Sekunden von allein wieder schließt. Wer aus diesem Skript eine EXE-Datei erzeugen möchte, der klickt im Tools Menü auf "Build" oder drückt die Taste F7. AutoIt erzeugt nun im gleichen Verzeichnis wie die ".AU3"-Skriptdatei eine gleichbenannte EXE-Datei, die dann völlig losgelöst von AutoIt arbeiten kann. Probieren Sie es einfach mal mit den unterschiedlichen Werten aus!

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.

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.

Immer aktiv - auch ohne Systemdienst

Es existiert eine ganze Reihe von Anwendungsfällen, bei denen es wichtig ist, dass ein bestimmtes Programm konstant läuft. Sollte dieses Programm dann doch einmal beendet werden, so müsste es sofort wieder starten. Üblicherweise nutzen Entwickler hierfür die Technik der "Daemons" oder Dienste, wie diese Hintergrundprozesse des Betriebssystems bei Microsoft Windows genannt werden. AutoIt-Nutzer können hingegen mit wenigen Zeilen die Aktvierung eines Programms sicherstellen, ohne dass sie dazu einen Dienst entwickeln und über das Betriebssystem dafür sorgen müssen, dass dieser stets arbeitet. Das folgende Skript demonstriert, wie sie dazu vorgehen können:

While 1
Sleep(1000)
If Not ProcessExists("notepad.exe") Then
Run("notepad.exe")
EndIf
Wend

Das gezeigte Skript prüft, ob der Notepad-Prozess bereits gestartet wurde. Ist dies nicht der Fall, so wird Notepad gestartet. Die Dauerschleife mit den Anweisungen "While 1" und "Wend" läuft stets - der Windows-Benutzer wird also stets das AutoIt-Symbol im Tray sehen. Die entstehende Systemlast fällt auf aktuellen Systemen kaum ins Gewicht und einen "Wait"-Befehl muss der Anwender ebenfalls nicht einbauen.

Nicht mehr auf dem Desktop zu sehen: Fenster unsichtbar

Was aber nun, wenn ein derart gestartetes Programm auf dem Desktop "unsichtbar" sein soll? AutoIt bietet hier eine Möglichkeit, bei der ein Nutzer zwar weiterhin das Symbol von AutoIt in der Taskleiste sieht, das Programm aber mittels der Window-Mittel transparent, oder gar unsichtbar gemacht werden kann. Das folgende Beispiel-Skript, wie das funktioniert:

While 1
Sleep(1000)
If Not ProcessExists("notepad.exe") Then
Run("notepad.exe")
EndIf
WinSetTrans("Unbenannt - Editor","","127")
Wend

Setzt der Anwender den Wert 127 im Befehl "WinSetTrans" auf den Wert 0, so ist das Windows-Fenster unsichtbar. Bei 127 ist das Fenster halbwegs transparent, bei 255 wäre es dann wieder ganz regulär sichtbar.

Kontrolle über das, was auf dem Bildschirm zu sehen ist: Mit Hilfe von AutoIt kann der Anwender sehr einfach die Fenstertransparenz unter Windows seinen Wünschen anpassen.

Wir konnten in diesem Workshop die Leistungsumfang von AutoIt natürlich nur streifen - es gibt noch eine Vielzahl von Anwendungsfällen, beispielsweise der Datenbankzugriff auf SQLite, E-Mail-Versand, Backup-Programme oder auch die Möglichkeiten der Grafikprogrammierungen, Tipps und Ideen findet der interessierte Leser im deutschsprachigen Forum von AutoIt.