Diese kleine Einführung soll dir helfen sofort loszulegen, um deine eigenen Makros und Hotkeys erstellen zu können.
Ein Skript ist eine einfache Textdatei, die Befehle enthält, die durch das Programm (Autohotkey.exe) ausgeführt werden. Ein Skript kann auch Hotkeys und Hotstrings beinhalten und unter Umständen sogar nur aus diesen bestehen. Wenn keine Hotkeys und Hotstrings im Skript vorhanden sind, werden die Befehle beim Ausführen des Skripts aufeinanderfolgend von oben nach unten abgearbeitet.
Um ein neues Skript zu erstellen:
Das Zeichen # steht für die Windows Taste. #space meint also, dass Sie die Windows-Taste gedrückt halten und zusätzlich die "Leertaste" (space) betätigen sollen, um den Hotkey zu aktivieren. Die zwei :: bedeuten, dass der im Anschluss notierte Befehl jedesmal ausgeführt werden soll, wenn diese Tastenkombination betätigt wird. In diesem Fall den Besuch der Google-Webseite. Um dieses Skript auszuprobieren, verfahren Sie wie folgt:
Anmerkung: Mehrere Skripte können parallel zur gleichen Zeit ausgeführt werden. Jedes erhält sein eigenes Trayicon. Darüber hinaus kann jedes Skript mehrere Hotkeys und Hotstrings enthalten.
Um ein Programm, Dokument, eine URL oder Verknüpfung auszuführen, benutzt man den Run Befehl wie in folgenden Beispielen:
Run Notepad
Run C:\Eigene Dateien\Addressliste.doc
Run C:\Eigene Dateien\Verknüpfung.lnk
Run www.yahoo.com
Run mailto:someone@somedomain.com
Mit Hilfe eines Hotkey Label kann jedem der obigen Beispiele ein Hotkey zugewiesen werden. Im ersten Beispiel unten ist der zugewiesene Hotkey die Tastenkombination Win+N. Die Tastenkombination im zweiten Beispiel lautet Strg+Alt+C:
#n::Run Notepad
^!c::Run calc.exe
Die obigen Beispiele bezeichnet man auch als "single-line hotkey" (Einzeilenhotkey), da jedes nur aus einem einzigen Befehl besteht. Um durch einen Hotkey mehr als nur einen Befehl ausführen zu lassen, setzen Sie die erste Zeile unter die Hotkeydefinition und beenden den Block in der letzten Zeile mit einem return. Siehe folgendes Beispiel:
#n::
Run http://www.google.com
Run Notepad.exe
return
Falls das Programm oder Dokument, welches ausgeführt werden soll, kein Bestandteil des Systems ist, notieren Sie den kompletten Pfad, um es auszuführen:
Run %A_ProgramFiles%\Winamp\Winamp.exe
Die Variable %A_ProgramFiles% aus obigem Beispiel ist eine durch Autohotkey bereitgestellte Variable. Indem man anstatt einer Pfadangabe wie C:\Programme diese Variable verwendet, kann das Script leichter auf andere Umgebungen übertragen werden. Das heißt, es erhöht die Wahrscheinlichkeit, dass das Script auch auf anderen Computern erfolgreich ausgeführt werden kann. Anmerkung: Groß- bzw. Kleinschreibung ist bei den Namen der Befehle und Variablen irrelevant. "Run" ist beispielsweise gleichbedeutend mit "run"; "A_ProgramFiles" gleichbedeutend mit "a_programfiles".
Um zu erreichen, dass ein Script auf das Schließen/Beenden eines Programmes oder Dokumentes wartet, bevor es fortfährt, benutzen Sie anstatt des Run Befehls den sogenannten RunWait Befehl. Im folgenden Beispiel wird der MsgBox Befehl erst ausgeführt wenn der jeweilige Benutzer Notepad geschlossen hat.
RunWait Notepad
MsgBox Der Benutzer ist fertig (Notepad wurde geschlossen).
Um mehr über das Ausführen von Programmen zu erfahren - wie zum Beispiel das Übergeben von Parametern, das Bereitstellen eines Arbeitsverzeichnisses oder das Ermitteln des Exitcodes eines Programmes - klicken sie hier.
Tastenanschläge werden mittels Send Befehl an das aktive (vorderste) Fenster übergeben. Das folgenden Beispiel macht Win+S zu einem Hotkey um eine Signatur anzufügen. (Versichern Sie sich vor dem Drücken der Tastenkombination Win+S, dass ein entsprechender Editor oder der Entwurf einer neuen E-Mail Nachricht das aktive Fenster ist):
#s::
Send mit freundlichen Grüßen,{enter}Hans Meier
return
Im oberen Beispiel wurden alle Zeichen bis auf {enter} buchstabengetreu übergeben. {enter} stellt einen simulierten Druck auf die Enter Taste dar. Das nächste Beispiel erklärt einige der anderen, häufig verwendeten Sonderzeichen:
Send, ^c!{tab}eingefügt:^v
Das obige Beispiel sendet Strg+C gefolgt von Alt+Tab wiederum gefolgt von der Zeichenkette "eingefügt:" und als Abschluss ein Strg+V an die gegenwärtig aktiven Fenster. Eine Liste aller Sonderzeichen und Tasten finden Sie in der Beschreibung des Send Befehls.
Tastenanschläge können auch als Ergebnis einer getippten Abkürzung, bekannt als sogenannte Hotstrings, übermittelt werden. Wenn Sie beispielsweise Mfg tippen, gefolgt von der Leertaste oder einem Komma, wird die folgende Zeile das Geschriebene durch "Mit freundlichen Grüßen" ersetzen:
::mfg::Mit freundlichen Grüßen
Mausklicks: Um einen
Mausklick an ein Fenster zu übergeben ist es wichtig, zuerst die X
und Y Koordinaten festzustellen, bei denen das Klickereignis
stattfinden soll. Dies kann man entweder mit AutoScriptWriter oder
Window Spy erledigen, welche beide zum Lieferumfang von AutoHotkey
gehören. Die folgenden Schritte beziehen sich auf die Window Spy
Methode:
Um die Maus zu bewegen, ohne zu klicken können Sie den MouseMove Befehl nutzen. Um mit der Maus zu ziehen (drag), benutzen Sie den Befehl MouseClickDrag.
Mit dem Befehl WinActivate können Sie ein Fenster aktivieren (es zum vordersten Fenster machen). Um festzustellen ob ein Fenster existiert, können Sie den Befehl IfWinExist oder WinWait benutzen. Das folgenden Beispiel verdeutlicht den Einsatz der Befehle:
IfWinExist, Unbenannt - Editor
{
WinActivate
}
else
{
Run, Notepad
WinWait, Unbenannt - Editor
WinActivate
}
Das obige Beispiel sucht zuerst nach einem existierenden Fenster dessen Titelleiste mit dem Ausdruck "Unbenannt - Editor" beginnt (Auf Groß- und Kleinschreibung achten). Wenn ein solches Fenster gefunden wird, wird es aktiviert. Andernfalls wird Notepad gestartet und das Script wartet auf das Fenster mit besagter Titelleiste, um im Anschluss daran aktiviert zu werden. Das obige Beispiel macht außerdem Gebrauch von last found window, um zu vermeiden, dass hinter jedem WinActivate Befehl erneut der Fenstertitel angeben werden muss.
Einige der anderen, häufig eingesetzten Fenster Befehle lauten:
Das folgende Beispiel zeigt eine Dialogbox mit zwei Schaltflächen (YES und NO):
MsgBox, 4, , Möchten Sie fortfahren?
IfMsgBox, No
return
; Andernfalls hat der Benutzer YES gedrückt. MsgBox Sie haben YES gedrückt.
Mit dem InputBox Befehl veranlassen Sie einen Benutzer eine Zeichenkette einzugeben. Mit dem FileSelectFile oder FileSelectFolder Befehl können Sie den Benutzer eine Datei oder einen Ordner auswählen lassen. Für kompliziertere Aufgaben können Sie den Gui Befehl benutzen, um Eingabemasken für Benutzereingaben und Benutzerschnittstellen bereitzustellen.
Tipp: Sie werden vielleicht in den anderen Beispielen festgestellt haben, dass das erste Komma eines Befehls weggelassen werden kann (Ausgenommen der erste Parameter ist leer). Zum Beispiel:
MsgBox Das ist OK.
MsgBox, Das ist auch OK (es hat ausdrücklich ein Komma)
Eine Variable ist ein Speicherbereich in dem das Skript Text ablegt. Obwohl alle Variablen ihren Inhalt als Zeichenketten ablegen, wird sie automatisch - sofern die Variable nur Ziffern (mit einem optionalen Dezimalpunkt) enthält - in eine Zahl umgewandelt, wenn eine mathematische Operation oder ein Vergleich dies erfordert. Umgekehrt wird das Ergebnis einer mathematischen Operation wieder in eine Zeichenkette umgewandelt, wenn es wieder in eine Variable abgespeichert werden soll.
Abgesehen von lokalen Variablen in Funktionen sind alle Variablen global. Das heißt, ihr Inhalt kann von jeder Position aus im Skript gelesen oder verändert werden. Außerdem werden Variablen nicht deklariert. Sie entstehen sozusagen einfach durch ihre Verwendung (und jede Variable wird zu Beginn leer angelegt).
Wie Sie einer Variablen eine Zeichenkette (String) zuweisen, wird aus folgendem Beispielen deutlich:
MyVar1 = 123Wie Sie den Inhalt einer Variablen mit einer Zahl oder einer Zeichenkette vergleichen, zeigt folgendes Beispiel:
MyVar2 = my string
if MyVar2 = my string
{
MsgBox MyVar2 enthält die Zeichenkette "my string".
}
if MyVar1 >= 100
{
MsgBox MyVar1 enthält %MyVar1%, und ist eine Zahl größer oder gleich 100.
}
Beachten Sie, dass in der MsgBox Zeile oben das zweite MyVar1 mit Prozentzeichen umschlossen ist. Das zeigt an dieser Stelle den Inhalt von MyVar1 an. Die gleiche Vorgehensweise kann dazu genutzt werden, den Inhalt einer Variablen in eine andere Variable zu kopieren. Zum Beispiel:
MyVarConcatenated = %MyVar1% %MyVar2%
Die obere Zeile legt die Zeichenkette "123 my string" (ohne die Anführungszeichen) in der Variablen MyVarConcatenated ab.
Wie man den Inhalt einer Variablen mit dem einer anderen vergleicht, zeigt ein weiteres Beispiel:
if (ItemCount > ItemLimit)
{
MsgBox Der Wert in ItemCount ist %ItemCount%, und ist größer als %ItemLimit%.
}
Achten Sie darauf, dass das Beispiel oben in der ersten Zeile runde Klammer enthält. Diese runden Klammern kennzeichnen einen Ausdruck (expression). Ohne diese Klammern wäre diese Zeile ein sogenanntes "non-expression if-statement". In diesem Fall müsste ItemLimit in Prozentzeichen eingeschlossen werden. Solche if-Statements sind beschränkt auf einen einzigen Vergleichsoperator, das heißt sie können keine mathematischen Operatoren oder Verknüpfungen wie "AND" und "OR" enthalten.
Mathematik: Um eine mathematische
Operation durchzuführen, können Sie mit Hilfe des
"Doppelpunkt-IstGleich" Operators (:=) das Ergebnis eines Ausdrucks einer Variablen zuweisen. Genaueres zeigt das untere Beispiel:
Nettopreis := Preis * (1 - Rabatt/100)
Eine Liste aller mathematischen Operatoren finden Sie in der Beschreibung zu Ausdrücke.
Zwischenablage: Die Variable Clipboard
ist ein Spezialfall. Sie enthält den aktuellen Text der Windows
Zwischenablage. Natürlich kann Sie auch als ganz normale Variable
genutzt werden. Die folgende Zeile würde zum Beispiel den
aktuellen Inhalt der Zwischenablage anzeigen:
MsgBox %clipboard%
Um den Inhalt der Zwischenablage zu verändern, könnten Sie folgendes Beispiel verwenden. Es ersetzt den aktuellen Inhalt der Zwischenablage mit einem neuen Text:
clipboard = Eine neue Zeile Text.`r`nUnd noch eine Zeile.`r`n
`r und `n aus obigem Beispiel (ein Akzent gefolgt vom Buchstaben "r" oder "n") werden zum Erzeugen zweier Steuerzeichen verwendet: carriage return und linefeed. Diese zwei Zeichen beginnen eine neue Zeile Text so, als ob der jeweilige Benutzer Enter gedrückt hätte.
Um Text zur Zwischenablage (oder jeder anderen Variablen) hinzuzufügen, folgen Sie einfach dem nächsten Beispiel:
clipboard = %clipboard% Und hier der Text der hinzugefügt werden soll.
Weitere Details erfahren Sie in der Beschreibung zu Clipboard und Variablen.
Die Anwort auf die Frage, wie man etwas öfter als einmal hintereinander ausführen kann, ist der Loop Befehl (Schleife). Der Loop im nächsten Beispiel ruft dreimal hintereinander MsgBox auf:
Loop 3
{
MsgBox Dieser Dialog wird dreimal angezeigt.
}
Statt einer Zahl wie 3 können Sie auch eine Variable verwenden. Dies ist nützlich für den Fall dass die Anzahl der Wiederholungen irgendwo im Script definiert ist:
Loop %RunCount%
{
Run C:\Check Server Status.exe
Sleep 60000 ; Wartet 60 Sekunden. }
Solange RunCount nicht 0 ist, wird der Loop im Beispiel oben entsprechend der gespeicherten Zahl genau so oft ausgeführt. Für den Fall, dass RunCount 0 ist, wird die Schleife (bzw. die Befehle, die sie enthält) kein einziges Mal ausgeführt.
Ein Loop kann sich auch selbst beenden, wenn sich wie im unteren Beispiel eine oder mehrere Bedingungen ändern. Im folgenden Beispiel wird wiederholt die linke Maustaste gedrückt, solange der Benutzer die F1 Taste gedrückt hält:
$F1:: ; Mache die F1 Taste zu einem Hotkey (das $ Zeichen ist zur Unterstützung des "P" Modus von GetKeyState weiter unten). Loop ; Da keine Zahl angegeben ist, ist dies eine Endlosschleife es sei denn man trifft auf ein "break" oder "return". { if not GetKeyState("F1", "P") ; Wenn dieses Behauptung wahr ist, hat der Benutzer die F1 Taste losgelassen. break ; Aus der Schleife "ausbrechen". ; Andernfalls (da bisher die Schleife nicht per "break" verlassen wurde ), klicke weiter mit der Maus. Click ; Drücke die linke Maustaste an der aktuellen Mauszeigerposition. } return
Das obere Beispiel ist von der Arbeitsweise identisch mit einer sogenannten "while...do" loop (Schleife). Der Satz "while...do" bedeutet, dass ein Loop (Schleife) etwas wiederholt tut (do), solange (while) eine bestimmte Bedingung wahr ist und bleibt. In unserem Fall klickt die Loop solange einen Knopf, solange die F1 Taste gedrückt gehalten wird. Wenn der Benutzer F1 loslässt, erkennt dies die Schleife und stoppt sich selbst mit Hilfe des Break Befehls. Break sorgt dafür, dass das Script an der Zeile nach der Abschlussklammer "}" des Loop weiter abgearbeitet wird.
Das obige Beispiel ist eine Art Allzweckschleife. Für speziellere Aufgaben oder Anforderung gibt es auch noch folgende Schleifen (Loops):
File-reading/writing loop: Fragt die Zeilen einer Textdatei eine nach der anderen ab. Damit könnte man eine Datei zeilenweise in ein neues, anderes Format konvertieren. Man kann damit aber auch nach Zeilen suchen, die ein bestimmtes Kriterium oder Muster erfüllen.
Files and folders loop: Fragt die angegebenen Dateien oder Ordner eine(n) nach dem anderen ab. Das ermöglicht eine Operation/Aktion auf jede Datei oder Ordner anzuwenden, die/der selbst definierte Kriterien erfüllt.
Parsing loop: Fragt eine Zeichenkette nach Teilzeichenketten ab. Damit könnte man zum Beispiel eine Zeichenkette wie "Rot,Grün,Blau" ganz einfach in drei Einzelketten "Rot" "Grün" und "Blau" aufspalten.
Registry loop: Fragt den Inhalt eines angegebene Registrierungsunterschlüssels Eintrag für Eintrag ab.
Um an das Ende einer Datei Text anzufügen (oder eine neue Datei anzulegen) verwenden Sie einfach den FileAppend Befehl wie im folgenden Beispiel. Beachten Sie, dass `n (linefeed) verwendet wird, damit nach dem Anfügen auf einer neuen Zeile Text weitergeschrieben werden kann:
FileAppend, Eine Zeile Text die angefügt wird.`n, C:\Eigene Dateien\Meine Textdatei.txt
Um eine existierende Datei zu überschreiben, verwenden Sie einfach vor FileAppend denn FileDelete Befehl. Zum Beispiel:
FileDelete, C:\Eigene Dateien\Meine Textdatei.txt
Einige weitere, häufig benutzte Befehle für Dateien und Ordner sind:
Eine ausführliche Liste aller Befehle finden Sie in der Befehlsreferenz.