- AutoIT (Anfänger)
- Vorbereitung
- SciTE
- Kommentare
- Funktionen
- Strings
- Variablen
- Arten
- Zuweisung von Daten
- Auslesen
- Variablen in Strings
- Macros
- Bedingungen
- Schleifen
- Arrays
- Arten
- Zuweisung von Daten
- Auslesen
- Arrays in Strings
- Mehrdimensionale Arrays
- Arten
- Zuweisung von Daten
- Auslesen
- MehrdimensionaleArrays in Strings
- UDF
- Was ist eine UDF
- Einbinden einer UDF
- Erstellen eigener UDF's
- Returns
- AutoIT (Fortgeschritten)
Vorbereitung
<-- AutoIT3 V3.3.8.1
<-- SciTE4AutoIT3 V 3.3.9.4Als erstes laden wir uns AutoIT3 und den Editor herunter. Danach installieren wir erst AutoIT und danach SciTE.
Tipp:
Bei der Installation von AutoIT können wir wählen ob beim öffnen einer .au3 Datei diese gestartet (Run the script) oder editiert (Edit the script) wird. Wählt bei diesem Punkt "Run the script" aus. Dies verhindert einen Fehler in Koda (mehr dazu später)
SciTE
In diesem Abschnitt möchte ich euch die wichtigsten Funktionen von SciTE erklären.Hilfe
SciTE besitzt zu allen Funktionen eine Hilfe mit Syntax, Beispielen und Rückgabewerten die wir über die Menüleiste unter Help aufrufen oder mit der Taste F1.
Script ausführen
Unser erstelltes Script können wir mit der Tast F5 oder in der Menüleiste unter Tools -> Go ausführen.
Script sortieren
Die Funktion "Tidy AutoIT Source" sortiert unser Script ein wenig in dem es an den richtigen stellen Tabs einsetzt und so die Form verschönert. Neben der Verschönerung wird auch noch ein Backup des Sourcecodes erstellt. Ausführen können wir das ganze mit CTRL+T oder unter dem Menüpunkt Tools -> Tidy AutoIT Source
Script zur .exe
Den Sourcecode können wir entweder mit F7 bzw. Tools -> Build oder mit extra Optionen unter CTRL+F7 bzw. Tools -> Compile.
Kommentare
Endlich können wir anfangen mit dem eigentlichen Coden. Bei Scripts die sehr unübersichtlich sind, ist es wichtig das man im nachhinein das nachvollziehen kann was man getan hat. Nicht nur für diesen Zweck sind Kommentare. Ein Kommentar wird nicht vom Programm verwendet und dient nur den oben genannten Verwendungsbeispielen.Kommentare die über eine Zeile gehen werden mit einem ";" eingeleitet.
Bei Kommentaren die über mehrere Zeilen gehen benötigen wir ein anfangs- und ein Endtag.
Funktionen
In AutoIT gibt es zurzeit so um die 300 Funktionen die von dem Anzeigen einer Nachrichtenbox bis zum auslesen einer Datei gehen. Um eine Funktionen zu benutzen müssen wir wissen wie sie heißt und was für Daten diese benötigt um ihre Aufgabe zu erledigen. Diese Daten nennt man Parameter und müssen nach einer festgelegten Reihenfolge angegeben werden.Wie eine Funktion aufgebaut wird zeigt folgendes Beispiel :
Angewendet an einer echten Funktionen (MsgBox). Das obere ist der festgelegte Aufbau als Kommentar aus der Hilfe von AutoIT :
Wie wir sehen werden innerhalb der "()" alle Parameter angegeben. Parameter die zwischen einem "[]" stehen müssen nicht angegeben werden sondern dienen nur der verfeinerten Einstellung einer Funktion. Wichtig ist das Optionale Parameter wie alle anderen mit einem "," von einander getrennt werden und nicht wie in der Hilfe zwischen "[]". Diese sind nur zur Erkennung ob der Parameter ein Optionaler oder Regulärer ist.
Als Ergebnis nach dem Ausführen des oberen Codes würde folgendes bei raus kommen :
Was die einzelnen Parameter bedeuten könnt alles in der Hilfe nachlesen.
Tipp:
Eine Liste aller Funktionen findet ihr hier:

Strings
Ein String ist eine Zeichenkette. Diese kann aus Zahlen, Buchstaben oder Sonderzeichen bestehen. Sie müssen mit einem " umschlossen werden oder in dem Fall das der String ein " enthält mit '.Wichtig ist das Zeilenumbrüche in Strings nicht mit einem normalen ENTER generiert werden sondern mit dem Macro @LF oder @CRLF. Was Macros sind könnt ihr hier nachlesen.
Wichtig:
Wenn ihr Zahlen mit einem " oder ' umschließt zählt diese nicht mehr als Zahl sondern als Text.
Variablen
Variablen sind unser Speichermedium in denen wir Daten abspeichern können um sie zu einem Späteren Zeitpunkt z.B für eine Berechnung wieder zu verwenden. Auch für diese gibt es einen Festen Aufbau :
Doch was bedeuten die einzelnen Daten nun ? (Auch hier gilt Daten in "[]" sind Optional) das erste was wir angeben können ist der Bereich in der die Variable gültig ist. Dieser kann Global sein (überall im Script verfügbar), Lokal (nur innerhalb einer Funktion) oder Dim (Ist nur dann Lokal wenn es keine Globale Variable gleichen Namens gibt). Danach kommt ein "$" das der Variable vorangestellt wird und danach der Name. Zuletzt wird mit einem "=" der Inhalt der Variable festgelegt. Ein paar Beispiele :
Wie wir dem Beispiel entnehmen können, kann einer Variable alle Arten von Daten zugewiesen werden. Wichtig ist aber das wir Texte zwischen "" setzen und falls in dem Text ein " vorhanden ist zwischen zwei ' .
Um den in einer Variable abgespeicherten Wert auch wieder auszulesen um ihn weiter zu verwenden, reicht es die Variable an die passende stelle zu schreiben. Ein beispiel dafür wäre :
Wenn wir einen Text mit dem Inhalt einer Variable zu ergänzen können wir die Variable mit einem "&" vom eigentlichem Text trennen :
Tipp:
Versucht den Variablen passende Namen zu finden. Bei größeren Projekten hilft dies um zu verhindern das man nicht mehr weis welche Variable nun welchen Inhalt besitzt.
Macros
Macros kann man als vorgefertigte Variablen bezeichnen die nur auslesbar sind. Sie werden beim Start des Scripts mit dem richtigen Inhalt gefüllt. Man leitet diese mit einem "@" ein.Eine typische Verwendung wäre z.B :
Diese MsgBox würde nun das Unterverzeichnis ausgeben in dem das Script gestartet wurde ohne großen Aufwand.
Tipp:
Eine Liste aller Macros findet ihr hier :

Bedingungen: IF
Da wir nun alles über Variablen und Arrays wissen wollen wir nun wissen ob der Inhalt dieser für bestimmte Events geeignet sind. Um euch den zweck einer If Abfrage zu verdeutlichen, werden wir ein kleines Programm erstellen das ein Passwort überprüft. Fangen wir an !1.) Wir speichern das richtige Passwort in der Variable PW
2.) Wir lassen ein sogenanntes InputBox erscheinen das uns nach einem Passwort frägt. Da die Funktion InputBox als Rückgabewert den eingegebenen Text hat speichern wir diesen direkt in der Variable Test_PW ab.
3.) Nun wollen wir wissen ob das echte Passwort das gleiche ist wie das eingegebene. Hier kommt das If zum Einsatz. Wer es bis jetzt noch nicht bemerkt hat ist AutoIT eine Englische Scriptsprache (wie eig. jede). Also schreiben wir uns das ganze erstmal auf Deutsch auf:
und schon haben wir unseren Code.Quote:
Wenn $PW genau so ist wie $Test_PW dann tue etwas ende
oder
Wenn $PW gleich $Test_PW dann tue etwas ende
auf englisch
If $PW = $Test_PW then
EndIf
Das "tue etwas" können wir nun mit jeder Funktion ersetzen. Hauptsache es steht zwischen der "if" Zeile und "EndIF"
Wenn wir das Script nun Ausführen stellen wir schnell fest, ist das Passwort falsch passiert nichts. Nur bei der Eingabe des richtigen Passworts, erscheint eine MsgBox. Dafür gibt es das kleine Wörtchen "sonst" (engl.:else).
Wenn wir eine zweite Abfrage starten wollen wenn die erste Abfrage nicht korrekt ist, können wir dies mit ElseIf tun.
Tipp:
Natürlich gibt es nicht nur den "=" (ist Gleich) vergleich. Eine Liste aller Logischen Operationen findet ihr hier:

Bedingungen: Switch
Wir wissen nun das wir mit If eine Abfrage machen können. Aber was ist wenn es 10 Möglichkeiten gibt die Richtig seinen können. Das würde mit einer If Abfrage zwar Funktionieren ist aber nicht wirklich übersichtlich. Für so eine Fall gibt es die Switch Abfrage in der ein zu überprüfender Wert angegeben wir und die dazu möglichen Ergebnise.
Wie wir sehen nach dem Befehl "Switch" kommt der Wert der geprüft werden soll. Zwischen "Switch" und "EndSwitch" steht für jedes Mögliches Ergebnis ein "Case" folgend von dem Möglichen Wert. Unter dem "Case" steht dann der auszuführende Code. Sollte keins der Möglichkeiten stimmen wird der Code nach "Case Else" ausgeführt.
Tipp:
Diese Abfrage ist nur eine Wahr, Flasch Abfrage das heißt es gibt kein größer, kleiner etc. für diese Art benutzt man Select.
Soll geprüft werden ob der angegebene Wer zwischen zwei Zahlen liegt kann man das z.B so lösen:
Quote:
...
case 5 to 10
...
Bedingungen: Select
Select ist genau so aufgebaut wie die Switch Abfrage nur das nun kein Wert angegeben wir der geprüft wird sondern wir können pro "Case" eine eigenständige Abfrage erstellen. Sollte diese War sein wird der Code nach dem Case ausgeführt. Wichtig ist das, nach der ersten richtigen Abfrage keine andere angefangen wird. Verwirrend ? Ich weis ! Beispiel :
Schleifen: While
Im Allgemeinen benötigt man Schleifen für Funktionen die man öfters wiederholen will. Die "While" Schleife wird solang ausgeführt solang der Wert neben "While" richtig ist. Beispiel :
In diesem Beispiel wird die Funktion sleep immer wieder ausgeführt solange der Prozess test.exe existiert. Wichtig ist hier das erst geprüft wird ob der wert Richtig ist und dann die While Schleife angefangen wird.
Tipp:
Soll die Schleife für immer laufen (natürlich nur bis das Script geschlossen wird) dann schreibt einfach nach While eine 1 denn 1 ist immer 1 und somit richtig.
Schleifen: Do
Die Do Schleife ist exakt wie die While Schleife nur der zu überprüfende Werte steht unten.
Der unterschied zu der While Schleife ist schnell erklärt und zwar wird hier erst der Inhalt der Schleife ausgeführt und dann geprüft ob der Wert Richtig ist. Sollte dieser Richtig sein wird die Schleife von Vorne abgespielt.
Schleifen: For
Die wohl meist genutzte Schleife ist die For Schleife. Diese kann man eine bestimme anzahl an Runden laufen lassen. Für diese benötigen wir eine Variable die den Startwert beinhaltet, einen End Wert und in welchen Schritte die Schleife Läuft. Beispiel:
Da bei jedem Durchlauf $i um eins erhöht wird, wissen wir immer in welcher Runde sich die Schleife befindet. In diesem Fall wird die Variable aber nicht um eins erhöht sondern um 10 das heißt, da der Startwert 1 ist und der Endwert 100, das wir 10 Durchläufe haben.
Arrays
Da wir nun wissen was Variablen sind, fällt uns schnell auf das wir pro Variable nur ein Inhalt festlegen können. Arrays sind fast das gleiche wie Variablen nur das man in dieser mehrere Inhalte speichern kann. Würde man ein Array Graphisch darstellen sähe sie wie folgt aus:| Spalte 0 | |
|---|---|
| Zeile 0 | 1. Inhalt |
| Zeile 1 | 2. Inhalt |
| Zeile 2 | 3. Inhalt |
Wie wir sehen sitzt der 1. Inhalt an Position 0 (Zeile 0). Meist ist an dieser Stelle die anzahl an Inhalte gespeichert hier wäre es 2. Wie speichert man nun aber Daten in einem Array ab ? Das ganze ist exakt wie bei einer Variable bis auf das wir als erstes den Array Umfang festlegen und beim Speichern von Daten die Zeile angeben in die der Datensatz gespeichert wird.
Als Graphik:
| Spalte 0 | |
|---|---|
| Zeile 0 | 4 |
| Zeile 1 | Das ist die 2.Zeil |
| Zeile 2 | Das ist die 3.Zeil |
| Zeile 3 | Das ist die 4.Zeil |
| Zeile 4 | Das ist die 5.Zeil |
Auch hier gelten alle Einstellungen bezüglich Gültigkeitsbereich und Inhalte bis auf das die Möglichkeit weg fällt kein Gültigkeitsbereich auszuwählen.
Beim Auslesen müssen wir nun den Namen der Variable und die Zeile angeben.
Mehrdimensionale Arrays
Da wir ja nicht geizig sind wollen wir jetzt aber nicht nur Werte in einer Spalte sondern in mehreren. Dies könnte z.B bei der Abspeicherung von Kundendaten helfen. Auch hier eine graphische Darstellung.| Spalte 0 | Spalte 1 | Spalte 2 | |
|---|---|---|---|
| Zeile 0 | 3 | ||
| Zeile 1 | Peter | 27.04.1990 | Huberstraße 13 |
| Zeile 2 | Max | 1.1.200 | Epvpweg 22 |
| Zeile 3 | Susi | 29.12.1820 | Altersack 22 |
Hier gelten die gleichen Regeln wie beim Array nur wir müssen jetzt natürlich auch die Spalte angeben.
(Das wäre der Code zur Tabelle oben)
Zum Schluss natürlich noch, wie man das ganze wieder ausliest. Wenn ihr gut aufgepasst habt müsstet ihr wissen was nun kommt. Trotzdem in aller kürze.
Variablenname + Zeile + Spalte
UDF
Da wir nun alle Basics kennen, wenden wir uns der Erstellung eigener Funktion zu.Diese nennt man UDF (eng.:User Defined Function).
Der Aufbau einer Funktion ist ganz einfach.
PHP Code:
Func Funktionsname($Parameter1,$Parameter2,$Optionalerparameter1="Hallo")
EndFunc
Es gibt nun drei Möglichkeiten wo wir diese Funktion abspeichern.
1.) Funktionen im eigenem Script.
Das einfachste ist natürlich die Funktion einfach ans Ende der Scriptes zu speichern. Nun können wir die Funktion ganz normal verwenden.
2.) Funktion auslagern (I)
Bei vielen Projekte hat man 10 oder mehr Funktionen die das Script unnötig unübersichtlich machen. Darum kann man das ganze auch in externe Datein abspeichern. Hierfür sind zwei dinge wichtig. Erstens muss die Datei im Ornder AutoIT3 -> Include sein und zweitens muss am Anfang der externen Datei ein
#include-once stehen.
In unserem Fall heißt die externe Datei Croco.au3. Um nun unsere Funktion zu verwenden müssen wir erst diese Datei in unser Script einbinden (das heißt unserem Script zur Verfügung stellen.). Dies machen wir mit #include <Croco.au3> .
Jetzt können wir wieder unsere Funktion benutzen ohne das sie in unserem Script ist.
3.) Funktion auslagern (II)
Wollen wir die Datei nicht in den Include Ordner abspeichern (weiß Gott warum nicht es soll so Leute geben
Tipp:
Versucht eure Funktion so aufzubauen das man später fast alle Einstellung über diese beim aufrufen ändern kann. Dies hilft dem späterem Benutzer bei der Verwendung.
Returns
Wir haben ja gerade gelernt wie wir eigene Funktionen erstellen. Gerade bei Funktionen die eine wichtige Aufgabe haben ist es wichtig bei einem Fehler zu wissen was Falsch gelaufen ist. Nicht nur dafür gibt es die Funktion "return" die uns Daten beim aufrufen der Funktion zurückgibt.Ein kleines Beispiel ist :
Bei dieser Funktion wird "TRUE" (Wahr bzw. 1) zurückgegeben wenn der Prozess Existiert der in der $Process angegeben wird und "FALSE" (Falsch bzw. 0) wenn nicht. Wenn wir diesen Wert abspeichern wollen können wir die Funktion einfach in einer Variable abspeichern.
----------------------------------------------------------------------------------------------------------------------------------------------------
Datenspeicherung
Wir wissen zwar das wir Daten in Variablen speichern können. Das Problem ist das diese werte verloren gehen sobald das Script beendet wird. Das heißt wir müssen eine Möglichkeit finden Daten abzuspeichern die selbst beim beenden noch bestehen. Für diesen zweck gibt es das Dateiformat .ini .Wiki:
Das klingt doch Perfekt. Als erstes will ich euch den aufbau einer .ini Datei erklären. Wie wir aus dem Zitat entnehmen stehen in einer Ini Wortpaare einmal ein Key (Schlüssel) und ein Wert. Die Keys werden in einzelnen Sektionen abgespeichert. Ein beispiel für eine Ini die Kundendaten speichert ist folgendes.Quote:
Eine Initialisierungsdatei (kurz INI-Datei) ist eine Textdatei, die Wertepaare in einem speziellen Format enthält. Initialisierungsdateien werden häufig von Desktop-Programmen benutzt, um Einstellungen zu speichern.
Wie wir sehen haben wir eine Sektion Namens Peter mit verschiedenen Keys. Hier wären es Tel,Email und Fax. Diese Keys haben jeweils einen Inhalt.Quote:
[Peter]
Tel=08106-123456
Email=
Fax=08106-123457
[Franz]
Tel=1234-12234
Email=
Fax=1234-12235
Extra für dieses Format gibt es 7 Funktionen in AutoIT.
Wir werden nun Schritt für Schritt alle Funktionen durchgehen.Quote:
IniDelete = Löscht eine Sektion oder Key.
IniRead = Liest einen Key aus.
IniReadSection = Gibt alle Keys mit Inhalt einer Section aus.
IniReadSectionNames = Gibt alle Sectionen einer Ini aus.
IniRenameSection = Ändert den Namen einer Sektion.
IniWrite = Erstellt einen Key und / oder Inhalt.
IniWriteSection = Erstellt eine Section.
1.) IniWriteSection
Mit dieser Funktion könnt ihr eine Sektion in der Ini erstellen.
Parameter:
Quote:
IniWriteSection ( "filename", "section", "data" [, index] )
| Parameter | Bedeutung | Beispiel |
|---|---|---|
| filename | Der Pfad zur .ini (oder nur der Name wenn die Datei im gleichen Ordner ist.) | Save.ini oder C:\Users\XXX\Daten.ini |
| section | Der Name der Sektion | Settings oder Peter |
| data | Der Inhalt der Sektion | "Tel=1234"&@LF&"Fax=1235" |
| index | - | - |
Wichtig:
Wenn ihr bei dieser Funktion beim Parameter data etwas eintragt dann seit euch bewusst das nach jedem Key mit seinem Wert ein "&@LF&" stehen muss.
@LF ist ein Zeilenumbruch.
Tipp:
Es ist besser beim Parameter einen Leeren String also "" anzugeben, da es für das erstellen von Keys eine extra Funktion gibt.
Diese Funktion wird so gut wie nie verwendet da die Funktion IniWrite die Sektion erstellt falls diese noch nicht existiert.
2.) IniWrite
Mit dieser Funktion werden Keys mit ihrem Inhalt erstellt. Sollte die angegebene Sektion nicht existieren wird diese erstellt.
Quote:
IniWrite ( "filename", "section", "key", "value" )
| Parameter | Bedeutung | Beispiel |
|---|---|---|
| filename | Der Pfad zur .ini (oder nur der Name wenn die Datei im gleichen Ordner ist.) | Save.ini oder C:\Users\XXX\Daten.ini |
| section | Der Name der Sektion | Settings oder Peter |
| key | Der Name des Schlüssels | Tel oder Teste |
| value | Der Wer des Schlüssels | 08106 12345 oder ![]() |
Wichtig:
Es kann immer nur ein Key des gleichen Namens in einer Sektion existieren. Solltet ihr einen Key angeben der bereits existiert wird dieser samt Wert überschrieben
3.) IniDelete
Mit dieser Funktion lässt sich eine komplette Sektion mit seinen Key löschen oder nur einzelne Keys.
Quote:
IniDelete ( "filename", "section" [, "key"] )
| Parameter | Bedeutung | Beispiel |
|---|---|---|
| filename | Der Pfad zur .ini (oder nur der Name wenn die Datei im gleichen Ordner ist.) | Save.ini oder C:\Users\XXX\Daten.ini |
| section | Der Name der Sektion | Settings oder Peter |
| key | Der Name des Schlüssels | Tel oder Teste |
Tipp:
Wollt ihr nur den Inhalt eines Keys löschen müsst ihr dies mit IniWrite machen.
Als Key gebt ihr den Namen des Keys an und als Value "".
4.) IniRenameSection
Mit dieser Funktion lässt sich der Name einer Sektion ändern.
Quote:
IniRenameSection ( "filename", "section", "new section" [, flag] )
| Parameter | Bedeutung | Beispiel |
|---|---|---|
| filename | Der Pfad zur .ini (oder nur der Name wenn die Datei im gleichen Ordner ist.) | Save.ini oder C:\Users\XXX\Daten.ini |
| section | Der Name der Sektion | Settings oder Peter |
| new section | Der neue Name der Sektion | Peter oder Settings |
| flag | 0 = Falls der Name der neue Sektion bereits besteht, wird nichts umbenannt. 1 = Überschreibt die Sektion (löscht alle Keys) | NUR 0 oder 1 |
5.) IniRead
Liest einen Wert aus einem Key aus.
Quote:
IniRead ( "filename", "section", "key", "default" )
| Parameter | Bedeutung | Beispiel |
|---|---|---|
| filename | Der Pfad zur .ini (oder nur der Name wenn die Datei im gleichen Ordner ist.) | Save.ini oder C:\Users\XXX\Daten.ini |
| section | Der Name der Sektion | Settings oder Peter |
| key | Der Name des Schlüssels | Tel oder Teste |
| default | Wird ausgegeben wenn der Key keinen Wert hat. | Error oder Kein Wert |
Tipp:
Als "default" Wert solltet ihr immer etwas eintragen das in jedem fall stimmt oder die Funktion unterbricht und nicht als Wert in Frage kommt. (z.B False oder Error)
6.) IniReadSection
Gibt alle Keys mit ihren Werten in Form eines 2 Dimensionalen Arrays aus.
(Spalte 0 bzw. 1 = Keys und Spalte 1 bzw. 2 = Werte)
Quote:
IniReadSection ( "filename", "section" )
| Parameter | Bedeutung | Beispiel |
|---|---|---|
| filename | Der Pfad zur .ini (oder nur der Name wenn die Datei im gleichen Ordner ist.) | Save.ini oder C:\Users\XXX\Daten.ini |
| section | Der Name der Sektion | Settings oder Peter |
7.)IniReadSectionNames
Gibt alle Namen der Sektionen in einer INI als 1 Dimensionales Array aus.
Quote:
IniReadSectionNames ( "filename" )
| Parameter | Bedeutung | Beispiel |
|---|---|---|
| filename | Der Pfad zur .ini (oder nur der Name wenn die Datei im gleichen Ordner ist.) | Save.ini oder C:\Users\XXX\Daten.ini |
Zum Schluss noch ein kleines Beispiel wie man die .ini von oben erstellen könnte.
Anmerkung:
Wie ihr bestimmt bemerkt habt können wir in einem String (Text) keine Zeilenumbrüche mit dem ganz normalen ENTER machen. Dafür gibt das Macro @LF bzw. @CRLF. Diese zwei Macros dienen als Zeilenumbrüche und können mit einem & einfach an einen String gehängt werden.






