Erste Schritte

aus AHK, der freien Wissensdatenbank

Wechseln zu: Navigation, Suche

Diese kurze Einführung soll dir helfen, möglichst schnell deine eigenen Makros und Hotkeys zu programmieren.

Inhaltsverzeichnis

Erstellen eines Skriptes

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:

  1. Öffnen Sie den Windows Explorer und anschließend einen Ordner ihrer Wahl.
  2. Öffnen Sie das Menü "Datei" (Alt+D) und wählen Sie "Neu->AutoHotkey Script" (oder Textdatei)
  3. Vergeben Sie einen Namen für die Datei, und vergewissern Sie sich, daß die Datei die Endung .ahk erhält. Beispiel: Test.ahk
  4. Machen Sie einen Rechtsklick auf die Datei und wählen Sie aus dem Kontextmenü den Eintrag "Edit Script"
  5. Tippen Sie in eine leere, neue Zeile folgendes ein:
#z::Run www.google.de

Das Zeichen "#" steht für die Windows Taste. Der Ausdruck #z meint also, daß Sie die Windows-Taste gedrückt halten und zusätzlich die "z" Taste betätigen sollen, um den Hotkey zu aktivieren. Die zwei :: bedeuten, daß 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:

  1. Speichern und schließen Sie die Datei.
  2. Doppelklicken Sie auf das Skript im Windows-Explorer, um es zu starten. Ein neues Trayicon erscheint.
  3. Halten Sie die Windows-Taste gedrückt, und betätigen Sie zusätzlich die "z" Taste. Es öffnet sich eine neue Webseite im eingerichteten Standardbrowser.
  4. Um das Skript zu beenden oder zu bearbeiten, machen Sie einen Rechtsklick auf das Trayicon.

Anmerkung: Mehrere Skripte können parallel zur gleichen Zeit ausgeführt werden. Jedes erhält sein eigenes Trayicon.

Ein Programm oder Dokument ausführen

Um ein Programm, ein Dokument, einen URL oder eine 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@anywhere.com

Mit Hilfe eines Hotkey-Labels 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, www.google.de
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, %ProgramFiles%\Winamp\Winamp.exe

Die Variable %ProgramFiles% aus obigem Beispiel ist eine Umgebungsvariable, die vom Betriebssystem bereitgestellt wird. 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, daß das Script auch auf anderen Computern erfolgreich ausgeführt werden kann.

Um zu erreichen, daß 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 Ausführen im minimierten/maximierten/verborgenen Zustand, das Bereitstellen eines Arbeitsverzeichnisses, das Übergeben von Parametern, das Benutzen sogenannter "system verbs" oder das Herausfinden des Exitcodes eines Programmes - klicken sie hier.

Tastenanschläge und Mausklicks übergeben

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, 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 Werte finden Sie in der Beschreibung des Befehls Send.

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:

  1. Starten Sie Window Spy entweder über das Trayiconmenü des Programms oder über das Startmenü.
  2. Aktivieren Sie das gewünschte Fenster entweder durch Klicken auf die dazugehörige Titelleiste, mittels Alt+Tab oder auf anderem Weg (Window Spy bleibt von Haus aus immer im Vordergrund).
  3. Bewegen Sie den Mauszeiger zur gewünschte Stelle im Zielfenster und notieren Sie sich die Mauskoordinaten, die Window Spy Ihnen anzeigt (oder drücken Sie Shift+Alt+Tab, um Window Spy zu aktivieren, und die "eingefrorenen" Koordinaten kopieren und wieder einfügen zu können).
  4. Benutzen Sie die soeben oben herausgefundenen Koordinaten mit dem Befehl MouseClick. Im folgenden Beispiel wird die linke Maustaste geklickt:
MouseClick, left, 112, 223

Um die Maus zu bewegen ohne zu klicken benutzen Sie den Befehl MouseMove. Um mit der Maus zu ziehen benutzen Sie den Befehl MouseClickDrag(z.B. bei gedrückter Maustaste einen Rahmen ziehen).

Fenster aktivieren und verändern

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. Die folgenden Beispiele geben einen Eindruck von diesen Befehlen:

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 benutzt außerdem last found window um zu vermeiden, das zu jedem WinActivate erneut ein Fenstertitel angeben werden muss.

Einige der anderen, häufig genutzen Fenster Befehle lauten:

  • WinWaitActive: Wartet darauf, daß ein Fenster aktiviert wird (typischerweise wird dieser Befehl gleich nach dem Run Befehl verwendet).
  • IfWinActive: Überprüft, ob ein Fenster gerade aktiviert ist.
  • WinClose: Schließt ein Fenster.
  • WinMove: Verschiebt ein Fenster, oder ändert dessen Größe.
  • WinMinimize, WinMaximize, WinRestore: Minimiert, maximiert, oder stellt entsprechend ein Fenster wieder her.

Benutzereingaben mit Msgbox, Inputbox, etc.

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 Ordner auswählen lassen. Für kompliziertere Aufgaben können Sie sich des Gui Befehls bedienen um Eingabemasken für Benutzereingaben und Benutzerschnittstellen bereitzustellen.


Verwenden von Variablen und der Zwischenablage

Variablen können verstanden werden als ein bereitgestellter Speicherbereich der Werte aufnehmen kann. Ein Wert kann eine beliebige Folge von Zeichen oder Zahlen sein (eine sogenannte Zeichenkette, im Englischen string). Obwohl zwischen Text und Zahlen kein Unterschied gemacht wird (beide werden als string abgespeichert), werden in einigen Fällen strings die nur aus Zahlen bestehen anders behandelt als solche die auch andere Zeichen enthalten. Zum Beispiel der Ausdruck InputString > BookmarkString würde diese beiden Variablen als Zahlen vergleichen solange beide numerische Werte enthalten. Anderfalls würden sie anhand der alphabetischen Reihenfolgen verglichen werden.

Alle Variablen sind global, was soviel heißt wie, ihr Inhalt kann von jeder subroutine des Skriptes gelesen und verändert werden. Übrigens werden Variablen nicht deklariert. Sie entstehen automatisch.

Wie Sie einer Variablen einen string zuweisen, wird aus folgendem Beispielen deutlich:

MyVar1 = 123
MyVar2 = my string

Wie Sie den Inhalt einer Variablen mit einer Zahl oder einem string vergleichen zeigt folgendes Beispiel:

if MyVar2 = my string
  {
    MsgBox MyVar2 enthält den string "my string".
  }
if MyVar1 >= 100
  {
    MsgBox MyVar1 enthält %MyVar1%, und ist eine Zahl größer oder gleich 100.
  }

Um den Inhalt einer Variable einer anderen zuzuweisen, umschließen Sie den/die Namen der Variable(n) auf der rechten Seite des Gleichheitszeichens mit Prozentzeichen. Im Beispiel unten wird der Variable MyVarConcatenated der string "123 my string" zugewiesen (natürlich ohne das Anführungs- und Schlusszeichen):

MyVarConcatenated = %MyVar1% %MyVar2%

Wie man den Wert einer Variablen mit dem einer anderen vergleicht, zeigt ein weiteres Beispiel:

if (ItemCount > ItemLimit + 1)
  {
    MsgBox Der Wert in ItemCount ist %ItemCount%, und ist größer als %ItemLimit% + 1.
  }

Achten Sie darauf, das das Beispiel oben in der ersten Zeile runde Klammer enthält. Diese runden Klammern kennzeichnen einen Ausdruck. 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 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 expressions


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 benutzt 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 dieser Text soll hinzugefügt werden.

Weitere Details erfahren Sie in der Beschreibung zu clipboard und variables

Eine Folge von Aktionen wiederholt ausführen

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 das 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 genauso oft ausgeführt. Für den Fall, das RunCount 0 ist, wird die Schleife kein einziges mal (bzw. die Befehle, die sie enthält) ausgeführt.

Ein Loop kann sich auch selbst beenden wenn sich wie im unteren Beispiel eine oder mehrere Bedingungen ändern:

Loop
  {
    PixelGetColor, Color, 11, 22
    if Color = 0xEEAA99  ; Dieser Pixel hat die korrekte Farbe.
        break  ; Aus dem Loop ausbrechen.
    ; Andernfalls weiter den Knopf drücken bis der Pixel seine Farbe ändert:
    ControlClick, OK, Title of Target Window
  }

Das obere Beispiel ist von der Arbeitsweise identisch mit einer sogenannten "while...do" loop (Schleife). Der Satz "while...do" bedeutet, das 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 (while) der Pixel die falsche Farbe hat. Wenn die richtige Farbe erscheint, beendet sich die Loop selbst mit dem break Befehl, der dafür sorgt, dass das Script an der Zeile nach der Abschlussklammer "}" der Loop weiter abgearbeitet wird.

Das obige Beispiel ist eine Art Allzweck Loop (Schleife). Für eine speziellere Aufgabe oder Anforderung gibt es auch noch folgende Loops:

  • 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.
  • 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.
  • 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 Registrierungsschlüssels nacheinander ab.

Dateien und Ordner bearbeiten

Wie man einer Datei Text hinzufügt, zeigen die folgenden Beispiele. Um ein neue Zeile mit Text zu beginnen wird in den Beispielen `n (linefeed) verwendet:

FileAppend, Eine Zeile Text die angehängt wird.`n, C:\Eigene Dateien\Meine Textdatei.txt

Einige weitere, häufig benutzte Befehle für Dateien und Ordner sind:


Übersicht anderer Funktionen

(an diesem Kapitel wird gearbeitet; eine ausführliche Liste aller Befehle finden Sie in der Befehlsreferenz)

Quelle

http://www.autohotkey.com/docs/Tutorial.htm

Persönliche Werkzeuge