AutoHotkey Anfänger-Tutorial von tidbit

Inhaltsverzeichnis

  1. Die Grundlagen
    1. AutoHotkey herunterladen und installieren
    2. Wie man ein Skript erstellt
    3. Wie man die englische Hilfedatei auf dem Computer findet
  2. Hotkeys & Hotstrings
    1. Tasten und ihre mysteriösen Symbole
    2. Fensterspezifische Hotkeys/Hotstrings
    3. Mehrere Hotkeys/Hotstrings pro Datei
    4. Beispiele
  3. Tastendrücke senden
    1. Videospiele
  4. Programme & Webseiten starten
  5. Funktionsaufrufe mit oder ohne runde Klammern
    1. Codeblöcke
  6. Variablen
    1. Benutzereingaben abrufen
    2. Weitere Beispiele
  7. Objekte
    1. Objekte erstellen
    2. Objekte verwenden
  8. Andere hilfreiche Goodies
    1. Die mysteriösen eckigen Klammern
    2. Die AHK-Version herausfinden
    3. Trial-and-Error-Prinzip
    4. Einrückung
    5. Um Hilfe bitten
    6. Andere Links

1 - Die Grundlagen

Bevor wir mit unserer Reise beginnen, habe ich ein paar Ratschläge für dich. Während dieses Tutorials wirst du viel Text und Code sehen. Um AutoHotkey optimal zu lernen, ist es ratsam, den Text zu lesen und die Beispielcodes auszuprobieren. Erst danach solltest du versuchen, die Codes zu analysieren. Die meisten Beispiele auf dieser Seite kannst du kopieren und in deinen Texteditor einfügen. Wenn du einen Abschnitt nicht auf Anhieb verstehst, empfehle ich dir, ihn noch einmal zu lesen.

a. AutoHotkey herunterladen und installieren

Bevor du lernst, wie man AutoHotkey (AHK) benutzt, musst du es herunterladen. Danach musst du AHK eventuell installieren, abhängig von der Version, die du heruntergeladen hast. In diesem Guide verwenden wir den Installer, da er am einfachsten zu bedienen ist.

Anleitung:

  1. Öffne die Homepage von AutoHotkey: https://www.autohotkey.com/
  2. Klicke auf Download. Du solltest nun eine Option für jede Hauptversion von AutoHotkey sehen. Diese Dokumentation ist für v2, also wähle diese Option aus oder wechsle zur v1-Dokumentation.
  3. Die heruntergeladene Datei sollte AutoHotkey_*_setup.exe oder ähnlich heißen. Führe sie aus und klicke auf Install.
  4. Wenn das erledigt ist, super! Weiter mit Abschnitt b.

b. Wie man ein Skript erstellt

Die folgende Anleitung zeigt dir, wie du AutoHotkey dazu bringst, etwas zu tun. AutoHotkey ist keine Zauberei - wir alle wünschen uns, dass es so wäre, aber es ist nicht so. Wir müssen AutoHotkey also sagen, was zu tun ist. Dieser Vorgang wird "Scripting" genannt.

Anleitung:

  1. Rechtsklicke auf deinen Desktop.
  2. Suche den Menüpunkt "Neu".
  3. Klicke auf "AutoHotkey Script" im Menü "Neu".
  4. Gib dem Skript einen neuen Namen. Der Name muss auf .ahk enden. Zum Beispiel: MeinSkript.ahk
  5. Suche die neue Datei auf deinem Desktop und rechtsklicke darauf.
  6. Klicke auf "Edit Script".
  7. Es sollte sich ein Fenster öffnen, wahrscheinlich Notepad. Wenn dies der Fall ist, ERFOLG!

    Nun, da du ein Skript erstellt hast, müssen wir noch etwas in die Datei einfügen. Eine Liste aller internen Funktionen und Variablen findest du unter Abschnitt 5.

    Hier ein sehr einfaches Skript mit einem Hotkey. Wenn der Hotkey gedrückt wird, wird Text mithilfe der Send-Funktion gesendet:

    ^j::
    {
        Send "Mein erstes Skript"
    }

    Später werden wir uns noch etwas genauer damit beschäftigen. Bis dahin erkläre ich dir, was der obige Code macht:

  8. Speichere die Datei.
  9. Doppelklicke auf die Datei bzw. auf das Symbol im Desktop, um das Skript auszuführen. Öffne Notepad (oder wo auch immer du etwas schreiben kannst) und drücke Strg und J.
  10. Unglaublich! Dein erstes Skript ist fertig. Hol dir zur Belohnung ein paar Snacks und lies dir den Rest des Tutorials durch.

Eine Videoanleitung findest du unter Install and Hello World auf YouTube.

c. Wie man die englische Hilfedatei auf dem Computer findet

Downloads für v2.0-a076 und höher enthalten eine Hilfedatei in derselben ZIP-Datei wie das Hauptprogramm. Wenn du die Dateien manuell entpackt hast, solltest du die Hilfedatei dort finden, wo du sie abgelegt hast.

v2.0-beta.4 und höher enthalten ein Installationsskript. Wenn du AutoHotkey auf diese Weise installiert hast, sollte sich die Hilfedatei für jede Version in einem Unterverzeichnis des Installationsverzeichnisses von AutoHotkey befinden, z.B. in "C:\Programme\AutoHotkey\v2.0-beta.7". Dort sollte sich auch eine symbolische Verknüpfung namens "v2" befinden, die auf das Unterverzeichnis der zuletzt installierten Version verweist. Wenn v1.x installiert ist, kannst du auch eine Hilfedatei für diese Version im Hauptverzeichnis finden.

Halte Ausschau nach AutoHotkey.chm oder einer Datei mit dem Namen "AutoHotkey" und einem gelben Fragezeichen.

Wenn du nicht danach suchen willst, gibt es auch Möglichkeiten, die Datei direkt zu starten:

2 - Hotkeys & Hotstrings

Was ist ein Hotkey? Ein Hotkey ist eine Taste, die sich heiß anfühlt. ... kleiner Scherz. Ein Hotkey ist eine Taste oder Tastenkombination, die der Benutzer auf der Tastatur drücken kann, um bestimmte Aktionen auszulösen. Zum Beispiel:

^j::
{
    Send "Mein erstes Skript"
}

Was ist ein Hotstring? Hotstrings werden hauptsächlich verwendet, um geschriebene Abkürzungen in lange Texte umzuwandeln (kurz Auto-Ersetzen), aber auch, um eine geskriptete Aktion zu starten. Zum Beispiel:

::ftw::Free the whales

Der Unterschied zwischen den beiden Beispielen besteht darin, dass der Hotkey durch Drücken von Strg+J ausgelöst wird, während der Hotstring dein geschriebenes "ftw" in "Free the whales" umwandelt.

"Also, wie genau erstellt jemand wie ich einen Hotkey?" Gute Frage. Ein Hotkey wird mit einem einzelnen Doppelpunktpaar erstellt. Die Taste oder Tastenkombination wird links von :: geschrieben. Und der Inhalt muss darunter in geschweiften Klammern stehen.

Hinweis: Es gibt Ausnahmen, aber diese sind eher verwirrend als nützlich. Daher werden sie im Tutorial nicht weiter behandelt, zumindest nicht im Moment.

Esc::
{
    MsgBox "Escape!!!!"
}

Ein Hotstring hat auf jeder Seite des zu ersetzenden Textes ein Doppelpunktpaar. Der Text, der deinen geschriebenen Text ersetzen soll, muss auf der rechten Seite des zweiten Doppelpunktpaares stehen.

Hotstrings können, wie bereits erwähnt, auch geskriptete Aktionen starten. Das ist eine ausgefallene Bezeichnung für "tu so ziemlich alles". Dasselbe gilt für Hotkeys.

::bzw::
{
    MsgBox "Du hast bzw geschrieben."
}

Außerdem solltest du wissen, dass du jedem Hotkey, Hotstring, Label und jedem anderen Element, das wir noch nicht besprochen haben, mehr als eine Codezeile zuweisen kannst.

^j::
{
    MsgBox "Wow!"
    MsgBox "Das sind"
    Run "notepad.exe"
    WinActivate "Unbenannt - Editor"
    WinWaitActive "Unbenannt - Editor"
    Send "7 Zeilen{!}{Enter}"
    SendInput "innerhalb des STRG{+}J-Hotkeys."
}

a. Tasten und ihre mysteriösen Symbole

Du fragst dich vielleicht: "Woher soll ich wissen, dass das Zirkumflex (^) die Strg-Taste symbolisiert?!". Nun, gute Frage. Um dir beizubringen, was ^ und andere Symbole bedeuten, hilft dir die folgende Tabelle weiter:

Symbol Beschreibung
# Win (Windows-Logo-Taste)
! Alt
^ Strg
+ Umschalt
& Mit einem Und-Zeichen können zwei beliebige Tasten oder Maustasten zu einem benutzerdefinierten Hotkey kombiniert werden.

(Die vollständige Liste der Symbole findest du auf der Hotkey-Seite)

Eine Liste aller Hotkey-Namen, die auf der linken Seite des Doppelpunktpaares eines Hotkeys verwendet werden können, findest du unter Tastenliste (Tastatur, Maus und Controller).

Mit & kann eine benutzerdefinierte Kombination von zwei (und nur zwei) Tasten (außer Controllertasten) definiert werden. Das folgende Beispiel zeigt, wie einer der Hotkeys ausgelöst werden kann, wenn Numpad0 gedrückt gehalten und dann Numpad1 oder Numpad2 gedrückt wird:

Numpad0 & Numpad1::
{
    MsgBox "Du hast Numpad1 gedrückt, während du Numpad0 gedrückt hieltst."
}

Numpad0 & Numpad2::
{
    Run "notepad.exe"
}

Du fragst dich jetzt sicher, ob Hotstrings auch coole Modifikatoren haben. Ja, die haben sie! Hotstring-Modifikatoren gehören in das erste Doppelpunktpaar. Zum Beispiel:

:*:ftw::Free the whales

Weitere Hotkey- und Hotstring-Modifikatoren, Informationen und Beispiele findest du unter Hotkeys und Hotstrings.

b. Fensterspezifische Hotkeys/Hotstrings

Du hast die Möglichkeit, einen Hotkey oder Hotstring nur für ein bestimmtes Fenster zu aktivieren (oder zu deaktivieren). Dazu musst du einen der Befehle verwenden, denen ein #-Zeichen vorangestellt ist, genauer gesagt #HotIf in Kombination mit der internen Funktion WinActive oder WinExist:

#HotIf WinActive(FensterTitel)
#HotIf WinExist(FensterTitel)

Dieser spezielle Befehl (auch "Direktive" genannt) erstellt kontextabhängige Hotkeys und Hotstrings. Gib einfach einen Fenstertitel für FensterTitel an. In einigen Fällen kann es jedoch sinnvoll sein, Kriterien wie HWND, Gruppe oder Klasse anzugeben. Solche Kriterien erfordern fortgeschrittene Kenntnisse und werden auf der folgenden Seite ausführlicher behandelt: FensterTitel-Parameter & Zuletzt Gefundenes Fenster.

#HotIf WinActive("Unbenannt - Editor")
#Space::
{
    MsgBox "Du hast WIN+LEER in Notepad gedrückt."
}

Um die Kontextabhängigkeit für nachfolgende Hotkeys oder Hotstrings auszuschalten, gib #HotIf ohne Parameter an. Zum Beispiel:

; Unbenannt - Editor
#HotIf WinActive("Unbenannt - Editor")
!q::
{
    MsgBox "Du hast ALT+Q in Notepad gedrückt."
}

; Jedes andere Fenster außer "Unbenannt - Editor"
#HotIf
!q::
{
    MsgBox "Du hast ALT+Q in einem beliebigen Fenster gedrückt."
}

Wenn #HotIf-Direktiven nie in einem Skript verwendet werden, sind Hotkeys und Hotstrings für alle Fenster wirksam.

Die #HotIf-Direktive ist positionsabhängig, d.h. sie beeinflusst nur Hotkeys und Hotstrings, die sich im Skript physisch darunter befinden, bis zur nächsten #HotIf-Direktive.

; Notepad
#HotIf WinActive("ahk_class Notepad")
#Space::
{
    MsgBox "Du hast WIN+LEER in Notepad gedrückt."
}
::msg::Du hast msg in Notepad geschrieben

; MSPaint
#HotIf WinActive("Unbenannt - Paint")
#Space::
{
    MsgBox "Du hast WIN+LEER im Paint-Programm gedrückt!"
}
::msg::Du hast msg im Paint-Programm geschrieben!

Weitere Informationen findest du auf der #HotIf-Seite.

c. Mehrere Hotkeys/Hotstrings pro Datei

Aus irgendeinem Grund haben einige Leute Probleme damit. Also werde ich es klarstellen: AutoHotkey bietet dir die Möglichkeit, beliebig viele Hotkeys und Hotstrings in einer Datei zu definieren. Ob es nun 1, 3253 oder mehr sind, spielt keine Rolle.

#i::
{
    Run "https://www.google.com/"
}

^p::
{
    Run "notepad.exe"
}

~j::
{
    Send "ack"
}

:*:acheiv::achiev
::achievment::achievement
::acquaintence::acquaintance
:*:adquir::acquir
::aquisition::acquisition
:*:agravat::aggravat
:*:allign::align
::ameria::America

Das obige Beispiel ist völlig in Ordnung. Mehrere Hotkeys, mehrere Hotstrings. Alles in einer großen, glücklichen Skriptdatei.

d. Beispiele

::bzw::beziehungsweise  ; Ersetzt "bzw" mit "beziehungsweise", sobald du ein vordefiniertes Endungszeichen drückst.
:*:bzw::beziehungsweise  ; Ersetzt "bzw" mit "beziehungsweise", ohne dass ein Endungszeichen notwendig ist.
^n::  ; STRG+N-Hotkey
{
    Run "notepad.exe"  ; Startet Notepad, sobald du STRG+N drückst.
}  ; Dies ist das Ende des Hotkeys. Der Code darunter wird beim Drücken des Hotkeys nicht ausgeführt.
^b::  ; STRG+B-Hotkey
{
    Send "{Ctrl down}c{Ctrl up}"  ; Kopiert den markierten Text. Man könnte auch ^c verwenden, aber diese Methode ist sicherer.
    SendInput "[b]{Ctrl down}v{Ctrl up}[/b]" ; Umschließt den markierten Text mit BBCode-Tags, um ihn in einem Forum fett darzustellen.
}  ; Dies ist das Ende des Hotkeys. Der Code darunter wird beim Drücken des Hotkeys nicht ausgeführt.

3 - Tastendrücke senden

Du hast also vor, Tasten zu senden (virtuell zu drücken). Das können wir tun. Benutze die Send-Funktion. Diese Funktion sendet wortwörtlich Tastendrücke, um das Schreiben oder Drücken von Tasten zu simulieren.

Doch bevor wir uns damit befassen, sollten wir über einige häufig auftretende Probleme sprechen.

Genau wie Hotkeys hat auch die Send-Funktion spezielle Tasten. Sehr, sehr viele davon. Hier die vier bekanntesten Symbole:

Symbol Beschreibung
! Sendet Alt. Zum Beispiel würde Send "Dies ist ein Text!a" die Tasten "Dies ist ein Text" senden und dann Alt+A drücken. Hinweis: !A hat in manchen Programmen eine andere Wirkung als !a. Der Grund dafür ist, dass !A die Tastenkombination Alt+Umschalt+A und !a die Tastenkombination Alt+A drückt. Im Zweifelsfall immer Kleinbuchstaben verwenden.
+ Sendet Umschalt. Zum Beispiel bewirkt Send "+abC", dass der Text "AbC" gesendet wird, und Send "!+a", dass Alt+Umschalt+A gedrückt wird.
^ Sendet Strg. Zum Beispiel bewirkt Send "^!a", dass Strg+Alt+A gedrückt wird, und Send "^{Home}", dass Strg+Pos1 gesendet wird. Hinweis: ^A hat in manchen Programmen eine andere Wirkung als ^a. Der Grund dafür ist, dass ^A die Tastenkombination Strg+Umschalt+A und ^a die Tastenkombination Strg+A drückt. Im Zweifelsfall immer Kleinbuchstaben verwenden.
# Sendet Win (die Taste mit dem Windows-Logo), also würde Send "#e" Win gedrückt halten und dann E drücken.

Die riesige Tabelle auf der Send-Seite zeigt so ziemlich jede spezielle Taste, die in AHK integriert ist. Zum Beispiel: {Enter} und {Space}.

Achtung: Diese Tabelle gilt nicht für Hotkeys. Das heißt, dass du Tasten wie Strg oder Enter nicht mit geschweiften Klammern umschließen solltest, wenn du einen Hotkey erstellst.

Das folgende Beispiel zeigt, was mit einem Hotkey nicht gemacht werden sollte:

; Beim Erstellen eines Hotkeys...
; FALSCH
{LCtrl}::
{
    Send "AutoHotkey"
}

; RICHTIG
LCtrl::
{
    Send "AutoHotkey"
}

Ein häufiges Problem, das viele Leute haben, ist, dass sie denken, dass geschweifte Klammern nur zum Spaß gesetzt werden. Aber tatsächlich sind sie notwendig. Nur so weiß AHK, dass z.B. {!} "Ausrufezeichen" bedeutet, nicht "drücke Alt". Vergiss nicht, dass du die Tabelle auf der Send-Seite verwenden kannst, um zu prüfen, ob alle Klammern richtig gesetzt sind. Zum Beispiel:

Send "Dieser Text wurde geschrieben{!}" ; Ist dir aufgefallen, dass das ! in geschweiften Klammern steht? Wäre dies nicht der Fall, würde AHK die ALT-Taste drücken.
; Wie oben, aber mit der ENTER-Taste. AHK würde "Enter" ausschreiben, wenn
; es nicht in geschweiften Klammern gesetzt wäre.
Send "Mehrere Enter Zeilen wurden Enter gesendet." ; FALSCH
Send "Mehrere{Enter}Zeilen wurden{Enter}gesendet." ; RICHTIG

Ein weiteres Problem, das viele Leute haben, ist, dass sie glauben, dass jedes einzelne Zeichen bei der Send-Funktion in geschweifte Klammern gesetzt werden muss. Das ist FALSCH. Wenn es nicht in der Tabelle steht, braucht es keine Klammern. Normale Buchstaben, Zahlen und sogar einige Symbole wie . müssen nicht in geschweifte Klammern gesetzt werden. Außerdem kannst du mehr als einen Buchstaben, eine Zahl oder ein Symbol pro Send-Funktion senden. Send-Funktionen, die nur einen Buchstaben senden, sind unnötig. Zum Beispiel:

Send "{a}"       ; FALSCH
Send "{b}"       ; FALSCH
Send "{c}"       ; FALSCH
Send "{a}{b}{c}" ; FALSCH
Send "{abc}"     ; FALSCH
Send "abc"       ; RICHTIG

Um eine Taste gedrückt zu halten oder loszulassen, setze den Tastennamen in geschweifte Klammern und füge das Wort UP oder DOWN hinzu. Zum Beispiel:

; So hältst du eine Taste gedrückt, während du eine weitere Taste (oder Tasten) drückst.
; Sollte eine Methode nicht funktionieren, probiere eine andere aus.
Send "^s"                     ; Beide senden STRG+S
Send "{Ctrl down}s{Ctrl up}"  ; Beide senden STRG+S
Send "{Ctrl down}c{Ctrl up}"
Send "{b down}{b up}"
Send "{Tab down}{Tab up}"
Send "{Up down}"  ; Die NACH-OBEN-Taste nach unten drücken.
Sleep 1000        ; 1 Sekunde gedrückt halten.
Send "{Up up}"    ; Die NACH-OBEN-Taste loslassen.

Jetzt fragst du dich vielleicht: "Wie kann ich meine wirklich langen Send-Funktionen besser lesbar machen?". Ganz einfach. Verwende den sogenannten Fortsetzungsbereich. Schreibe einfach eine runde Startklammer auf eine neue Zeile, dann deinen Inhalt und anschließend eine runde Endklammer. Weitere Informationen findest du unter Fortsetzungsbereiche.

Send "
(
Zeile 1
Zeile 2
Äpfel sind Früchte.
)"

Hinweis: Es gibt verschiedene Varianten von Send. Jede hat ihre eigenen Besonderheiten. Wenn eine nicht wie gewünscht funktioniert, probiere eine andere aus. Ersetze einfach den Funktionsnamen "Send" mit einem der folgenden: SendText, SendInput, SendPlay, SendEvent. Weitere Informationen zu den einzelnen Varianten findest du hier.

a. Videospiele

Das ist wichtig: Einige Spiele, insbesondere Multiplayer-Spiele, verwenden Anti-Cheat-Programme. Zum Beispiel GameGuard, Hackshield oder PunkBuster. Das Umgehen solcher Systeme ist nicht nur kompliziert, sondern verstößt auch gegen die Videospielregeln, was zu einem dauerhaften Bann führen kann.

Wenn ein Videospiel ein solches System hat und deine Hotkeys, Hotstrings und Send-Funktionen nicht funktionieren, hast du Pech gehabt. Es gibt jedoch Methoden, um die Erfolgschancen bei einigen Videospielen zu erhöhen, aber erwarte nicht, dass sie auf wundersame Weise sofort funktionieren werden. Ich empfehle dir, jede Methode auszuprobieren, bevor du aufgibst.

Es ist allgemein bekannt, dass DirectX die Ursache vieler Probleme ist. Wenn du Probleme mit einem DirectX-Videospiel hast, probiere die auf der FAQ-Seite beschriebenen Lösungsansätze aus. Weitere DirectX-Probleme können bei der Verwendung von PixelSearch, PixelGetColor oder ImageSearch auftreten. Farben werden als schwarz (0x000000) erkannt, egal welche Farbe du versuchst abzurufen. Du solltest auch versuchen, das Videospiel im Fenstermodus zu starten, wenn möglich. Dies könnte einige DirectX-Probleme lösen.

Es gibt keine einheitliche Lösung, um AutoHotkey für alle Programme funktionsfähig zu machen. Wenn alle Versuche fehlschlagen, ist AutoHotkey möglicherweise nicht für deine Zwecke geeignet.

4 - Programme & Webseiten starten

Um ein Programm wie mspaint.exe, calc.exe oder script.ahk zu starten oder einen Ordner zu öffnen, verwende die Run-Funktion. Run kann sogar zum Öffnen von URLs wie https://www.autohotkey.com/ verwendet werden. Wenn dein Computer so eingerichtet ist, dass er das gewünschte Programm ausführen kann, ist das ganz einfach:

; Ein Programm starten. Beachte, dass die meisten Programme einen VOLLSTÄNDIGEN Dateipfad benötigen:
Run A_ProgramFiles "\Beliebiges_Programm\Programm.exe"

; Eine Webseite öffnen:
Run "https://www.autohotkey.com"

Run unterstützt noch andere Features wie z.B. Befehlszeilenparameter und CLSID. Wenn du mehr darüber erfahren möchtest, solltest du einen Blick auf die Run-Seite werfen.

Hier ein paar weitere Beispiele:

; Einige Programme wie die von Windows benötigen keinen vollständigen Pfad:
Run "notepad.exe"
Run "mspaint.exe"

; Den Ordner "Dokumente" mit einer internen AHK-Variable öffnen:
Run A_MyDocuments

; Einige Webseiten öffnen:
Run "https://www.autohotkey.com"
Run "https://www.google.com"

Weitere Informationen und Beispiele findest du auf der Run-Seite.

5 - Funktionsaufrufe mit oder ohne runde Klammern

In AutoHotkey können Funktionsaufrufe mit oder ohne runde Klammern angegeben werden. Die runden Klammern sind in der Regel nur notwendig, wenn der Rückgabewert der Funktion benötigt wird oder der Funktionsname nicht am Anfang der Zeile geschrieben steht.

Eine Liste aller internen Funktionen findest du hier.

Ein typischer Funktionsaufruf sieht wie folgt aus:

Funktion(Parameter1, Parameter2, Parameter3) ; mit runden Klammern
Funktion Parameter1, Parameter2, Parameter3  ; ohne runde Klammern

Die Parameter unterstützen jede Art von Ausdruck; das bedeutet zum Beispiel:

  1. Du kannst in ihnen Berechnungen durchführen:
    SubStr(37 * 12, 1, 2)
    SubStr(A_Hour - 12, 2)
  2. Du kannst in ihnen andere Funktionen aufrufen (beachte, dass solche Funktionsaufrufe mit runden Klammern angegeben werden müssen, da sie nicht am Anfang der Zeile stehen):
    SubStr(A_AhkPath, InStr(A_AhkPath, "AutoHotkey"))
  3. Texte müssen in Anführungszeichen gesetzt werden:
    SubStr("Ich programmiere, genial!", 16)

Der übliche Weg, den Rückgabewert einer Funktion einer Variable zuzuweisen, sieht wie folgt aus:

MeineVar := SubStr("Ich programmiere, genial!", 16)

Das ist nicht der einzige Weg, aber der am häufigsten verwendete. Man verwendet MeineVar auf der rechten Seite des :=-Operators, um den Rückgabewert der Funktion zu speichern. Weitere Informationen findest du unter Funktionen.

Kurz gesagt:

; Das sind Funktionsaufrufe ohne runde Klammern:
MsgBox "Dies ist ein Text."
StrReplace Eingabe, "AutoHotKey", "AutoHotkey"
SendInput "Das ist genial{!}{!}{!}"

; Das sind Funktionsaufrufe mit runden Klammern:
SubStr("Ich programmiere, genial!", 16)
FileExist(VariableMitPfad)
Ausgabe := SubStr("Ich programmiere, genial!", 16)

a. Codeblöcke

Codeblöcke sind Codezeilen, die von kleinen geschweiften Klammern ({ und }) umschlossen sind. Dadurch weiß AutoHotkey, dass es sich um eine große Familie handelt und die Zeilen zusammen ausgeführt werden sollen. Codeblöcke werden häufig bei Funktionen und Kontrollanweisungen wie If und Loop verwendet. Ohne die Klammern wird nur die erste Zeile des Blocks ausgeführt.

Im folgenden Code werden beide Zeilen nur ausgeführt, wenn MeineVar gleich 5 ist:

if (MeineVar = 5)
{
    MsgBox "MeineVar ist gleich " MeineVar "!!"
    ExitApp
}

Im folgenden Code wird das Mitteilungsfenster nur angezeigt, wenn MeineVar gleich 5 ist. Das Skript wird immer beendet, auch dann, wenn MeineVar nicht 5 ist:

if (MeineVar = 5)
    MsgBox "MeineVar ist gleich " MeineVar "!!"
    ExitApp

Dies ist völlig in Ordnung, da der if-Anweisung nur eine Codezeile zugeordnet ist. Es ist genau dasselbe wie oben, aber ich habe die zweite Zeile nicht eingerückt, um zu zeigen, dass sie nicht zur if-Anweisung gehört:

if (MeineVar = 5)
    MsgBox "MeineVar ist gleich " MeineVar "!!"
MsgBox "Wir sind nun 'außerhalb' der if-Anweisung. Geschweifte Klammern waren nicht nötig, da nur eine Zeile darunter war."

6 - Variablen

Variablen sind vergleichbar mit Klebezetteln, die Informationen enthalten. Sie können verwendet werden, um Text, Zahlen, Daten von Funktionen oder mathematischen Gleichungen zu speichern. Ohne Variablen wäre das Programmieren und Skripten sehr viel mühsamer.

Es gibt mehrere Wege, einer Variable etwas zuzuweisen. Wir werden uns aber nur mit den bekanntesten beschäftigen. Bitte achte auf den Doppelpunkt-Gleich-Operator (:=).

Textzuweisung
MeineVar := "Text"

Dies ist der einfachste Weg, einer Variable etwas zuzuweisen. Einfach den Text hinschreiben und fertig. Texte müssen in Anführungszeichen gesetzt werden.

Variablenzuweisung
MeineVar := MeineVar2

Wie oben, nur dass einer Variable der Wert einer anderen Variable zugewiesen wird.

Zahlenzuweisung
MeineVar := 6 + 8 / 3 * 2 - Sqrt(9)

Dank der Ausdrücke kannst du auch rechnen!

Gemischte Zuweisung
MeineVar := "Das Ergebnis von 5 + " MeineVar2 " ist: " 5 + MeineVar2

Eine Kombination der drei obigen Zuweisungen.

Gleichheitszeichen (=) mit vorangestelltem Symbol wie z.B. :=, +=, -= und .= nennen sich Zuweisungsoperatoren.

a. Benutzereingaben abrufen

Manchmal ist es notwendig, Informationen vom Benutzer abzufragen. Es gibt mehrere Wege, dies zu tun, aber der einfachste ist die InputBox. Hier ein einfaches Beispiel, das zeigt, wie man dem Benutzer einige Fragen stellt und die gesammelten Daten verarbeitet:

IB1 := InputBox("Wie lautet dein Vorname?", "Frage 1")
if IB1.Value = "Bill"
    MsgBox "Du hast einen tollen Namen, " IB1.Value "."

IB2 := InputBox("Magst du AutoHotkey?", "Frage 2")
if IB2.Value = "ja"
    MsgBox "Danke, dass du mit " IB2.Value " geantwortet hast, " IB1.Value "! Wir werden gute Freunde."
else
    MsgBox IB1.Value ", das macht mich traurig."

b. Weitere Beispiele

Ergebnis := MsgBox("Willst du weitermachen?",, 4)
if Ergebnis = "No"
    return  ; Wenn Nein, stoppt der Code genau hier.
MsgBox "Du hast JA gedrückt."  ; Andernfalls hat der Benutzer Ja ausgewählt.
Var := "text"  ; Einer Variable etwas Text zuweisen.
Num := 6  ; Einer Variable eine Zahl zuweisen.
Var2 := Var  ; Einer Variable eine andere zuweisen.
Var3 .= Var  ; Eine Variable ans Ende einer anderen anfügen.
Var4 += Num  ; Den Wert einer Variable mit einem anderen addieren.
Var4 -= Num  ; Den Wert einer Variable von einem anderen subtrahieren.
Var5 := SubStr(Var, 2, 2)  ; Variable innerhalb einer Funktion.
Var6 := Var "Text"  ; Einer Variable eine andere plus etwas Text zuweisen.
MsgBox(Var)  ; Variable innerhalb einer Funktion.
MsgBox Var  ; Dasselbe wie oben.
Var := StrSplit(Var, "x")  ; Variable in einer Funktion mit EingabeVar und AusgabeVar.
if (Num = 6)  ; Prüfen, ob eine Variable gleich einer Zahl ist.
if Num = 6  ; Dasselbe wie oben.
if (Var != Num)  ; Prüfen, ob eine Variable ungleich einer anderen ist.
if Var1 < Var2  ; Prüfen, ob eine Variable kleiner als eine andere ist.

7 - Objekte

Objekte sind eine Möglichkeit, deine Daten effizienter zu organisieren. Ein Objekt ist im Grunde eine Sammlung von Variablen. Eine Variable, die zu einem Objekt gehört, wird als "Eigenschaft" bezeichnet. Ein Objekt kann auch Elemente enthalten, z.B. Array-Elemente.

Es gibt zahlreiche Gründe, warum man ein Objekt für etwas verwenden möchte. Einige Beispiele:

a. Objekte erstellen

Es gibt viele Wege, ein Objekt zu erstellen. Hier die gängigsten:

Syntax mit eckigen Klammern (Array)
MeinArray := ["eins", "zwei", "drei", 17]

Erstellt ein Array, das eine Liste von Elementen repräsentiert, die mit 1 und höher nummeriert sind. In diesem Beispiel wird der Wert "eins" auf Index 1 und der Wert 17 auf Index 4 gespeichert.

Syntax mit geschweiften Klammern
Banane := {Farbe: "Gelb", Geschmack: "Köstlich", Preis: 3}

Erstellt ein Ad-hoc-Objekt. Auf diese Weise lässt sich schnell ein Objekt mit einigen bekannten Eigenschaften erstellen. In diesem Beispiel wird der Wert "Gelb" in die Farbe-Eigenschaft und der Wert 3 in die Preis-Eigenschaft gespeichert.

Array-Konstruktor
MeinArray := Array("eins", "zwei", "drei", 17)

Identisch zur Syntax mit eckigen Klammern. Es ruft eigentlich die Array-Klasse auf, nicht eine Funktion.

Map-Konstruktor
MeinMap := Map("^", "Strg", "!", "Alt")

Erstellt ein Map bzw. assoziatives Array. In diesem Beispiel wird der Wert "Strg" mit dem Schlüssel "^" und der Wert "Alt" mit dem Schlüssel "!" verknüpft. Maps werden oft leer erstellt - mittels Map() - und später mit Elementen gefüllt.

Anderer Konstruktor
Banane := Frucht()

Erstellt ein Objekt der angegebenen Klasse (in diesem Fall Frucht).

b. Objekte verwenden

Objekte können auf verschiedene Weise verwendet werden. Sie können Werte abrufen, Werte setzen, neue Werte hinzufügen usw.

Setzen von Werten

Klammerschreibweise
MeinArray[2] := "ZWEI"
MeinMap["#"] := "Win"

Das Setzen von Array- oder Map-Elementen ähnelt dem Zuweisen eines Variablenwertes. Verwende einfach die Klammerschreibweise bei der Variable, die das Objekt enthält (Array, Map oder was auch immer). Der Index oder Schlüssel zwischen den eckigen Klammern ist ein Ausdruck, folglich müssen Anführungszeichen für alle nicht-numerischen, direkt geschriebenen Werte verwendet werden.

Punktschreibweise
Banane.Konsistenz := "Matschig"

In diesem Beispiel bekommt eine Eigenschaft, die im Banane-Objekt enthalten ist, einen neuen Wert zugewiesen. Wenn die Eigenschaft noch nicht existiert, wird sie erstellt.

Abrufen von Werten

Klammerschreibweise
Wert := MeinMap["^"]

In diesem Beispiel wird der Wert abgerufen, der zuvor dem Schlüssel "^" verknüpft wurde. Oft ist der Schlüssel in einer Variable enthalten, z.B. MeinMap[ModifikatorZeichen].

Punktschreibweise
Wert := Banane.Farbe

In diesem Beispiel wird die Farbe-Eigenschaft des Banane-Objekts abgerufen.

Hinzufügen neuer Schlüssel und Werte

Klammerschreibweise
MeinMap["NeuererSchlüssel"] := 3.1415

Um einen Wert oder Schlüssel direkt hinzuzufügen, setze einfach einen Schlüssel, der noch nicht existiert. Beachte aber, dass beim Zuweisen eines Wertes an ein Array der Index im Bereich von 1 bis zur aktuellen Länge des Arrays liegen muss. Verschiedene Objekte können unterschiedliche Anforderungen haben.

Punktschreibweise
MeinObjekt.NeueEigenschaft := "Glänzend"

Wie bereits oben erwähnt, wird beim Zuweisen eines Wertes an eine undefinierte Eigenschaft eine neue Eigenschaft erstellt.

InsertAt-Methode
MeinArray.InsertAt(Index, Wert1, Wert2, Wert3...)

InsertAt ist eine Methode zum Einfügen neuer Werte an einer bestimmten Position innerhalb eines Arrays, allerdings können auch andere Objekttypen eine Methode mit diesem Namen definieren.

Push-Methode
MeinArray.Push(Wert1, Wert2, Wert3...)

Push "hängt" die Werte an das Ende des Arrays MeinArray an. Diese Methode wird für das Hinzufügen neuer Array-Elemente bevorzugt, da die Klammerschreibweise nicht verwendet werden kann, um etwas außerhalb des aktuellen Wertebereichs zuzuweisen.

Entfernen von Eigenschaften und Elementen

Delete-Methode
EntfernterWert := MeinObjekt.Delete(BeliebigerSchlüssel)

Array und Map haben eine Delete-Methode, mit der der Wert aus dem Array oder Map entfernt werden kann. Der vorherige Wert von MeinObjekt[BeliebigerSchlüssel] wird in EntfernterWert gespeichert. Bei einem Array bewirkt dies, dass das Element keinen Wert mehr hat; es hat keinen Einfluss auf die anderen Elemente des Arrays.

Pop-Methode
MeinArray.Pop()

Diese Array-Methode entfernt das letzte Element eines Arrays und gibt dessen Wert zurück. Die Länge des Arrays wird um 1 verringert.

RemoveAt-Methode
EntfernterWert := MeinArray.RemoveAt(Index)
MeinArray.RemoveAt(Index, Länge)

Array hat die RemoveAt-Methode, mit der ein Element oder ein Bereich von Elementen entfernt werden kann. Elemente (falls vorhanden) rechts von den entfernten Elementen werden nach links verschoben, um den freigewordenen Platz zu füllen.

8 - Andere hilfreiche Goodies

Wir sind am Ende unserer Reise angelangt, werter Freund. Ich hoffe, du hast etwas gelernt. Aber bevor wir gehen, zeige ich dir noch ein paar Dinge, die du wissen solltest. Hab Spaß!

a. Die mysteriösen eckigen Klammern

Auf vielen Seiten wirst du zwei Symbole ([ und ]) innerhalb einer gelben Syntaxbox sehen, die etwas Bestimmtes umschließen. Alles innerhalb dieser eckigen Klammern ist optional. Das bedeutet, dass du alles dort drinnen weglassen kannst, wenn du es nicht brauchst. Beim Schreiben deines Codes ist es sehr wichtig, die eckigen Klammern nicht in deinem Code zu verwenden.

Auf der ControlGetText-Seite wirst du folgendes sehen:

Text := ControlGetText(Steuerelement , FensterTitel, FensterText, AusnahmeTitel, AusnahmeText)

Du könntest also folgendes machen:

Text := ControlGetText(Steuerelement)

Oder mehr Details hinzufügen:

Text := ControlGetText(Steuerelement, FensterTitel)

Was ist, wenn du AusnahmeTitel verwenden möchtest, aber nicht FensterText oder FensterTitel? Ganz einfach!

Text := ControlGetText(Steuerelement,,, AusnahmeTitel)

Beachte, dass du die Parameter nicht IGNORIEREN kannst, aber du kannst sie leer lassen. Würde man FensterTitel, FensterText ignorieren, sähe das wie folgt aus und würde zu Problemen führen:

Text := ControlGetText(Steuerelement, AusnahmeTitel)

b. Die AHK-Version herausfinden

Führe den folgenden Code aus, um deine aktuelle AHK-Version anzuzeigen:

MsgBox A_AhkVersion

Oder suche im Startmenü oder Installationsverzeichnis nach "AutoHotkey Help File" oder "AutoHotkey.chm".

c. Trial-and-Error-Prinzip

Trial-and-Error (Versuch und Irrtum) ist eine weit verbreitete und effektive Art des Lernens. Anstatt wegen jeder Kleinigkeit nachzufragen, kann es manchmal hilfreich sein, sich etwas Zeit zu nehmen (manchmal Stunden oder Tage) und die Lösung selbst zu finden. So lernst du schneller.

Wenn du etwas ausprobierst und eine Fehlermeldung erhältst, analysiere den Fehler. Versuche dann, deinen Code zu korrigieren. Führe ihn erneut aus. Wenn du immer noch eine Fehlermeldung erhältst, passe deinen Code weiter an. Fahre auf diese Weise fort, bis dein Code funktioniert. Auf diese Weise wirst du viel lernen, indem du die Dokumentation liest, die Fehler analysierst und herausfindest, was funktioniert und was nicht. Versuchen, scheitern, versuchen, scheitern, versuchen, versuchen, versuchen, scheitern, scheitern, Erfolg!

So haben viele "Profis" angefangen. Aber zögere nicht, uns um Hilfe zu bitten, wir beißen nicht. Lernen ist ein langwieriger Prozess, auch die "Profis" haben AutoHotkey nicht an einem Tag gemeistert.

"Wenn es beim ersten Mal nicht klappt, versuchen, versuchen Sie es erneut." - William E. Hickson

d. Einrückung

Diese Sache (Einrücken) ist sehr wichtig! Dein Code läuft auch ohne Einrückung, aber es hilft dir und anderen, deinen Code zu lesen. Ein kleines Skript (25 Zeilen oder weniger) ohne eingerückten Code kann vermutlich ohne Probleme gelesen werden, aber je größer es wird, desto unübersichtlicher wird es. Am besten lernst du so schnell wie möglich, wie du deinen Code einrückst. Es spielt keine Rolle, wie du deinen Code einrückst, aber achte darauf, dass es gleichmäßig aussieht.

"Was ist Einrücken?", fragst du dich? Es geht einfach darum, den Code mithilfe von Leerräumen in überschaubare Bestandteile zu gliedern, um sehen zu können, was zu was gehört. Normalerweise werden 3 oder 4 Leerzeichen oder ein Tabulatorzeichen pro "Stufe" verwendet.

Nicht eingerückt:

if (Auto = "alt")
{
MsgBox "Das Auto ist wirklich alt."
if (Räder = "platt")
{
MsgBox "Dieses Auto ist nicht fahrtüchtig."
return
}
else
{
MsgBox "Sei vorsichtig! Dieses alte Auto könnte zu einer Gefahr werden."
}
}
else
{
MsgBox "Meine Güte, dein neues Auto glänzt ja richtig."
}

Eingerückt:

if (Auto = "alt")
{
    MsgBox "Das Auto ist wirklich alt."
    if (Räder = "platt")
    {
        MsgBox "Dieses Auto ist nicht fahrtüchtig."
        return
    }
    else
    {
        MsgBox "Sei vorsichtig! Dieses alte Auto könnte zu einer Gefahr werden."
    }
}
else
{
    MsgBox "Meine Güte, dein neues Auto glänzt ja richtig."
}

Schau dir den Wikipedia-Artikel Einrückungsstil an, um verschiedene Stile und Beispiele in Erfahrung zu bringen. Entscheide selbst, was oder wie du einrücken willst bzw. wie dein Code am einfachsten zu lesen ist.

e. Um Hilfe bitten

Zuerst solltest du versuchen, selbst zu recherchieren oder den Code zu schreiben. Wenn du mit den Ergebnissen nicht zufrieden bist, kannst du die Community fragen, aber beachte dabei folgende Punkte:

Erwarte nicht, dass sofort geantwortet wird - warte wenigstens 1 Tag (24 Stunden), bevor du nachfragst. Wir helfen gerne, aber bedenke, dass wir unsere Hilfe kostenlos anbieten und unsere Freizeit dafür opfern. Wir könnten gerade arbeiten, schlafen, spielen, Zeit mit der Familie verbringen, oder einfach zu beschäftigt sein, um zu helfen.

Während du auf Hilfe wartest, kannst du versuchen, das Problem selbst zu lösen. Es ist ein tolles Gefühl, etwas ohne Hilfe geschafft zu haben.

f. Andere Links

Häufig gestellte Fragen (FAQ)