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.
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:
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:
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:
^j::
ist der Hotkey. ^
symbolisiert Strg, j
ist die Taste J. Alles links von ::
sind die Tasten, die du drücken musst.Send "Mein erstes Skript"
ist der Vorgang zum Senden von Tastendrücken. Send
ist die Funktion, alles nach dem Leerzeichen und innerhalb der Anführungszeichen wird gesendet.{
und }
markieren den Anfang und das Ende des Hotkeys.Eine Videoanleitung findest du unter Install and Hello World auf YouTube.
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:
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." }
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.
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.
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.
::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.
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.
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.
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.
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:
SubStr(37 * 12, 1, 2) SubStr(A_Hour - 12, 2)
SubStr(A_AhkPath, InStr(A_AhkPath, "AutoHotkey"))
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)
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."
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 (:=
).
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.
MeineVar := MeineVar2
Wie oben, nur dass einer Variable der Wert einer anderen Variable zugewiesen wird.
MeineVar := 6 + 8 / 3 * 2 - Sqrt(9)
Dank der Ausdrücke kannst du auch rechnen!
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.
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."
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.
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:
Es gibt viele Wege, ein Objekt zu erstellen. Hier die gängigsten:
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.
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.
MeinArray := Array("eins", "zwei", "drei", 17)
Identisch zur Syntax mit eckigen Klammern. Es ruft eigentlich die Array-Klasse auf, nicht eine Funktion.
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.
Banane := Frucht()
Erstellt ein Objekt der angegebenen Klasse (in diesem Fall Frucht).
Objekte können auf verschiedene Weise verwendet werden. Sie können Werte abrufen, Werte setzen, neue Werte hinzufügen usw.
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.
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.
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]
.
Wert := Banane.Farbe
In diesem Beispiel wird die Farbe-Eigenschaft des Banane-Objekts abgerufen.
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.
MeinObjekt.NeueEigenschaft := "Glänzend"
Wie bereits oben erwähnt, wird beim Zuweisen eines Wertes an eine undefinierte Eigenschaft eine neue Eigenschaft erstellt.
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.
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.
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.
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.
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.
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ß!
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)
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".
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
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.
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.