Variablen und Ausdrücke

Inhaltsverzeichnis

Variablen

Eine allgemeine Erklärung und Details zur Funktionsweise finden Sie unter Variablen.

Werte in Variablen speichern: Um eine Zeichenkette oder Zahl in eine Variable zu speichern, gibt es zwei Methoden: Legacy und Ausdruck. Die Legacy-Methode verwendet den Gleichheitszeichenoperator (=), um anführungszeichenlose direkt geschriebene Zeichenketten und in Prozentzeichen gesetzte Variablen zuzuweisen. Zum Beispiel:

MeineZahl = 123
MeineZkette = Dies ist eine direkt geschriebene Zeichenkette.
KopieVonVar = %Var%  ; Beim Operator "=" sind Prozentzeichen erforderlich, um den Inhalt einer Variable abzurufen.

Die Ausdrucksmethode hingegen verwendet den Doppelpunkt-Gleich-Operator (:=), um Zahlen, in Anführungszeichen gesetzte Zeichenketten und andere Arten von Ausdrücken zuzuweisen. Die folgenden Beispiele sind funktionsgleich mit den vorherigen Beispielen:

MeineZahl := 123
MeineZkette := "Dies ist eine direkt geschriebene Zeichenkette."
KopieVonVar := Var  ; Beim Operator ":=" werden keine Prozentzeichen verwendet.

Die letztere Methode wird von vielen bevorzugt, da sie eine Ausdruckssyntax unterstützt, die leichter zu verstehen ist und der Syntax vieler anderer Sprachen sehr ähnlich ist.

Diese Methoden können natürlich auch verwendet werden, um den Inhalt einer Variable zu löschen (um sie sozusagen leer zu machen):

MeineVar =
MeineVar := ""

Das obige leere Anführungszeichenpaar sollte nur mit dem Doppelpunkt-Gleich-Operator (:=) verwendet werden. Die Verwendung des Gleich-Operators (=) würde dazu führen, dass zwei Anführungszeichen in die Variable geschrieben werden.

Inhalte von Variablen abrufen: Analog zu den beiden Methoden zum Speichern von Werten gibt es auch zwei Methoden zum Abrufen von Werten: Legacy und Ausdruck. Bei der Legacy-Methode müssen die Namen der Variablen in Prozentzeichen gesetzt werden, um ihren Inhalt abzurufen. Zum Beispiel:

MsgBox Der Wert in der Variable namens Var ist %Var%.
KopieVonVar = %Var%

Bei der Ausdrucksmethode hingegen werden die Prozentzeichen neben den Variablennamen weggelassen, aber direkt geschriebene Zeichenketten in Anführungszeichen gesetzt. Demnach wären die folgenden Beispiele funktionsgleich mit den vorherigen Beispielen:

MsgBox % "Der Wert in der Variable namens Var ist " . Var . "."  ; Mit einem Punkt können zwei Zeichenketten verkettet (verbunden) werden.
KopieVonVar := Var

In der obigen MsgBox-Zeile wird ein Prozent- und Leerzeichen verwendet, um den Parameter vom Legacy- in den Ausdrucksmodus zu ändern. Dies ist notwendig, da fast alle Befehlsparameter standardmäßig die Legacy-Methode verwenden, sofern nicht anders dokumentiert.

Variablen vergleichen: Bitte lesen Sie sich den folgenden Abschnitt durch, um zu erfahren, welche Vergleiche es gibt und wann runde Klammern erforderlich sind.

Ausdrücke (Expressions)

Eine strukturierte Übersicht und zusätzliche Erklärungen finden Sie unter Ausdrücke (Expressions).

Ausdrücke werden verwendet, um eine oder mehrere Operationen auf eine Reihe von Variablen, direkt geschriebenen Zeichenketten und/oder direkt geschriebenen Zahlen anzuwenden.

Variablennamen (außer Pseudo-Arrays und andere Doppelreferenzen) dürfen innerhalb eines Ausdrucks nicht in Prozentzeichen gesetzt werden. Folglich müssen direkt geschriebene Zeichenketten in doppelte Anführungszeichen gesetzt werden, um sie von Variablen zu unterscheiden. Zum Beispiel:

if (AktuelleEinstellung > 100 or GefundeneFarbe != "Blau")
    MsgBox Die Einstellung ist zu hoch oder die Farbe ist falsch.

Im obigen Beispiel ist "Blau" in Anführungszeichen gesetzt, da es sich um eine direkt geschriebene Zeichenkette handelt. Geben Sie zwei aufeinanderfolgende Anführungszeichen an, um ein tatsächliches Anführungszeichen in eine direkt geschriebene Zeichenkette einzufügen. Zum Beispiel: "Sie sagte: ""Ein Apfel täglich.""".

Hinweis: Es gibt verschiedene Arten von If-Anweisungen, die wie Ausdrücke aussehen, aber keine sind.

Leere Zeichenketten: Um eine leere Zeichenkette in einem Ausdruck anzugeben, verwenden Sie ein leeres Anführungszeichenpaar. Zum Beispiel wäre die Anweisung if (MeineVar != "") wahr, wenn MeineVar nicht leer ist. Verwendet man aber ein leeres Anführungszeichenpaar bei einem Legacy-If, wird es als direkt geschriebener Text behandelt. Zum Beispiel wäre die Anweisung if MeineVar = "" nur wahr, wenn MeineVar ein tatsächliches Anführungszeichenpaar enthält. Verwenden Sie stattdessen bei einem Legacy-If den Operator = oder != mit nichts auf der rechten Seite, um zu prüfen, ob eine Variable leer ist, z.B. if Var =.

Beachten Sie, dass ungültige Ausdrücke wie (x +* 3) immer eine leere Zeichenkette zurückgeben.

Ergebnis eines Ausdrucks speichern: Um einer Variable das Ergebnis eines Ausdrucks zuzuweisen, verwenden Sie den Doppelpunkt-Gleich-Operator (:=). Zum Beispiel:

NettoPreis := Preis * (1 - Rabatt/100)

Boolesche Werte: In Fällen, wo die Auswertung eines Ausdrucks entweder True (wahr) oder False (falsch) ergeben muss (z.B. bei einer IF-Anweisung), wird eine leere Zeichenkette oder 0 als False und alle anderen Ergebnisse als True angesehen. Zum Beispiel wäre die Anweisung if ElementeAnzahl nur dann False, wenn ElementeAnzahl leer oder 0 ist. Der Ausdruck if not ElementeAnzahl würde das gegenteilige Ergebnis liefern.

Operatoren wie NOT/AND/OR/>/=/< erzeugen automatisch einen True- oder False-Wert: 1 für True und 0 für False. Im folgenden Beispiel wird 1 in die Done-Variable gespeichert, wenn eine der beiden Bedingungen True ist:

Done := A_Index > 5 or FoundIt

Wie oben angedeutet, kann eine Variable zum Speichern eines False-Wertes verwendet werden, indem sie einfach leer gemacht oder ihr 0 zugewiesen wird. Verwenden Sie dann die Kurzanweisung if Done, um zu prüfen, ob die Done-Variable True oder False ist.

Die Wörter True und False sind interne Variablen, die 1 bzw. 0 enthalten. Diese können verwendet werden, um die Lesbarkeit eines Skripts zu verbessern. Zum Beispiel:

GroßKleinSensitiv := false
SucheFortsetzen := true

Integer (ganze Zahlen) und Floating-Point-Zahlen (Gleitkommazahlen): Innerhalb eines Ausdrucks werden Zahlen, die einen Dezimalpunkt enthalten, als Floating-Point-Zahlen behandelt, andernfalls sind sie Integer. Für die meisten Operatoren wie Addition und Multiplikation gilt: Wenn einer der Eingabewerte eine Floating-Point-Zahl ist, ist auch das Ergebnis eine Floating-Point-Zahl.

Innerhalb und außerhalb von Ausdrücken können Integer sowohl im hexadezimalen als auch dezimalen Format geschrieben werden. Hexadezimalzahlen beginnen mit dem 0x-Präfix. Zum Beispiel ist Sleep 0xFF äquivalent zu Sleep 255. [v1.0.46.11+]: Floating-Point-Zahlen in wissenschaftlicher Schreibweise werden erkannt, aber nur, wenn sie einen Dezimalpunkt enthalten (z.B. 1.0e4 und -2.1E-4).

Ausdruck erzwingen: Obwohl Befehlsparameter (außer AusgabeVar) standardmäßig keine Ausdrücke unterstützen, kann ein Ausdruck erzwungen werden, indem ein Prozentzeichen gefolgt von einem Leer- oder Tabulatorzeichen vorangestellt wird. In [v1.1.21+] kann dieses Präfix im EingabeVar-Parameter eines Befehls verwendet werden, außer bei einem Legacy-If-Befehl (verwenden Sie stattdessen eine Ausdruck-If-Anweisung). Diese Technik wird häufig verwendet, um auf Arrays zuzugreifen. Zum Beispiel:

FileAppend, % MeinArray[i], Meine Datei.txt
FileAppend, % MeinPseudoArray%i%, Meine Datei.txt
MsgBox % "Die MeineVar-Variable enthält " . MeineVar . "."
Loop % Wiederholungen + 1
WinSet, Transparent, % X + 100
Control, Choose, % AktuelleAuswahl - 1

Operatoren in Ausdrücken

Allgemeine Informationen zu Operatoren finden Sie unter Operatoren.

Sofern nicht anders unten angegeben, werden leere Werte (leere Zeichenketten) oder nicht-numerische Werte innerhalb einer mathematischen Operation nicht als 0 interpretiert. Stattdessen werden sie als Fehler behandelt, was dazu führt, dass die Auswertung dieses Teils des Ausdrucks eine leere Zeichenkette ergibt. Wenn z.B. die Variable X leer ist, gibt der Ausdruck X+1 einen leeren Wert statt 1 zurück.

Aus historischen Gründen werden in Anführungszeichen gesetzte numerische Zeichenketten wie "123" immer als nicht-numerisch angesehen, wenn sie direkt in einem Ausdruck verwendet werden (aber nicht, wenn sie in eine Variable gespeichert oder von einer Funktion zurückgegeben werden). Dieses nicht-numerische Attribut kann durch eine Verkettung erzwungen werden, so dass Ausdrücke wie "0x" n einen nicht-numerischen Wert erzeugen (auch wenn n gültige hexadezimale Ziffern enthält). Dieses Problem kann umgangen werden, indem der Wert einer Variable zugewiesen oder über eine Funktion wie z.B. Round() übergeben wird. Generell sollte vermieden werden, direkt geschriebene Zahlen in Anführungszeichen zu setzen, da sich dieses Verhalten in einer zukünftigen Version ändern könnte.

Ausdrucksoperatoren (absteigende Priorität)

Operator Beschreibung
%Var%

Wenn eine Variable in einem Ausdruck mit Prozentzeichen umschlossen ist (z.B. %Var%), wird der gesamte Inhalt dieser Variable als Name oder Teil des Namens einer anderen Variable vermutet (wenn diese Variable nicht existiert, wird %Var% in eine leere Zeichenkette aufgelöst). Meistens wird dies verwendet, um Elemente eines Pseudo-Arrays zu referenzieren, zum Beispiel:

Var := MeinArray%A_Index% + 100

Aus Gründen der Abwärtskompatibilität ignorieren Befehlsparameter, die als "kann ein Ausdruck sein" dokumentiert sind, die Prozentzeichen bei einem alleinstehenden Namen in Prozentzeichen (z.B. %Var%, aber nicht Array%i%). Um das zu umgehen, umschließen Sie die Referenz mit runden Klammern, z.B. Sleep (%Var%).

[AHK_L 52+]: Zusätzlich zu den normalen Variablen kann %Var% in eine Umgebungsvariable, die Zwischenablage oder eine reservierte/schreibgeschützte Variable aufgelöst werden. Vor Revision 52 wurde %Var% in solchen Fällen in eine leere Zeichenkette aufgelöst.

x.y [AHK_L 31+]: Objektzugriff. Abrufen (Get), Setzen (Set) oder Aufrufen (Call) einer Methode des Objekts x, wobei y ein direkt geschriebener Wert ist. Siehe Objektsyntax.
new [v1.1.00+]: Erstellt ein neues Objekt, das von einem anderen Objekt abgeleitet ist. Zum Beispiel ist x := new y oft äquivalent zu x := {base: y}. Nach dem Wort new sollte eine Variable oder ein einfacher Klassenname in Form von GlobaleKlasse.VerschachtelteKlasse angegeben werden, optional auch Parameter wie in x := new y(z) (wobei y eine Variable ist, kein Funktionsname). Weitere Informationen finden Sie unter Benutzerdefinierte Objekte.
++
--
Vorherige und nachherige Inkrementierung/Dekrementierung. Erhöht oder verringert eine numerische Variable um 1 (in den Versionen vor 1.0.46 müssen diese allein in einer Zeile stehen; es dürfen keine anderen Operatoren vorhanden sein). Der Operator kann entweder vor oder hinter dem Namen der Variable stehen. Wenn der Operator vor dem Namen steht, wird die Operation sofort ausgeführt und das Ergebnis wird von der nächsten Operation verwendet. Zum Beispiel bewirkt Var := ++X, dass X sofort um 1 erhöht und der Wert in Var gespeichert wird. Wenn der Operator hingegen hinter dem Namen einer Variable steht, wird die Operation erst ausgeführt, nachdem die Variable von der nächsten Operation verwendet wurde. Zum Beispiel bewirkt Var := X++, dass X erst um 1 erhöht wird, nachdem der aktuelle Wert von X in Var gespeichert wurde. Aus Gründen der Abwärtskompatibilität behandeln diese Operatoren leere Variablen als 0, wenn sie allein in einer Zeile stehen. Zum Beispiel erzeugen sowohl y := 1, ++x als auch MsgBox % ++x ein leeres Ergebnis, wenn x leer ist.
**

Potenz. Anwendungsbeispiel: Basis**Exponent. Sowohl Basis als auch Exponent können einen Dezimalpunkt enthalten. Wenn Exponent negativ ist, wird das Ergebnis in eine Floating-Point-Zahl umgewandelt, auch dann, wenn Basis und Exponent Integer sind. Da dieser Operator eine höhere Priorität als ein unäres Minuszeichen hat, wird -2**2 wie -(2**2) ausgewertet und somit -4 zurückgeben. Um eine direkt geschriebene negative Zahl zu potenzieren, umschließen Sie diese mit runden Klammern, z.B. (-2)**2.

Hinweis: Eine negative Basis mit einem gebrochenen Exponenten wie (-2)**0.5 wird nicht unterstützt und gibt eine leere Zeichenkette zurück. Allerdings werden sowohl (-2)**2 als auch (-2)**2.0 unterstützt.

Hinweis: In AutoHotkey v1 ist ** im Gegensatz zu seinem mathematischen Gegenstück linksassoziativ. Zum Beispiel wird x ** y ** z als (x ** y) ** z ausgewertet.

-
!
~
& *

Unäres Minuszeichen (-): Obwohl dieser Operator und der Subtraktionsoperator dasselbe Symbol verwenden, wird das unäre Minuszeichen nur auf ein einzelnes Element oder einen Teilausdruck angewendet, z.B. -(3 / -x). Unäre Pluszeichen (+) werden in einem Ausdruck ignoriert.

Logisches NICHT (!): Wenn dieser Operator auf einen Operanden angewendet wird, der leer oder 0 ist, ist das Ergebnis 1 (true). Andernfalls ist das Ergebnis 0 (false). Zum Beispiel: !x or !(y and z). Hinweis: Das Wort NOT ist synonym mit !, allerdings hat ! eine höhere Priorität. [v1.0.46+]: Aufeinanderfolgende unäre Operatoren wie !!Var sind erlaubt, da sie von rechts nach links ausgewertet werden.

Bitweises NICHT (~): Dieser Operator invertiert jedes Bit seines Operanden. Wenn der Operand eine Floating-Point-Zahl ist, wird er vor der Berechnung auf Integergröße gekürzt. Wenn der Operand eine Zahl zwischen 0 und 4294967295 (0xffffffff) ist, wird er als vorzeichenloser 32-Bit-Wert behandelt. Andernfalls wird er als vorzeichenfähiger 64-Bit-Wert behandelt. Zum Beispiel wird ~0xf0f zu 0xfffff0f0 (4294963440) ausgewertet.

Adresse (&): &MeineVar ruft die Adresse des Inhalts von MeineVar im Speicher ab, was häufig für DllCall-Strukturen verwendet wird. &MeineVar deaktiviert außerdem das Caching von Binärzahlen in dieser Variable, was sich negativ auf ihre Performanz auswirken kann, wenn sie Teil einer Berechnung oder eines numerischen Vergleichs ist. Sobald sich die Adresse einer Variable ändert, wird das Caching wieder aktiviert (z.B. via VarSetCapacity()).

Dereferenz (*): *Ausdruck geht davon aus, dass Ausdruck eine numerische Speicheradresse ist; es ruft das Byte an dieser Adresse als Zahl zwischen 0 und 255 ab (0 wird immer abgerufen, wenn die Adresse 0 ist; andere ungültige Adressen sollten jedoch vermieden werden, da sie das Skript zum Absturz bringen können). Beachten Sie, dass NumGet() in der Regel viel performanter ist, wenn es darum geht, Binärzahlen abzurufen.

*
/
//

Multiplikation (*): Das Ergebnis ist ein Integer, wenn beide Eingabewerte Integer sind, andernfalls ist es eine Floating-Point-Zahl.

Echte Division (/): Im Gegensatz zu EnvDiv liefert die echte Division immer eine Floating-Point-Zahl, auch dann, wenn beide Eingabewerte Integer sind. Zum Beispiel ergibt 3/2 1.5 statt 1 und 4/2 2.0 statt 2.

Floor-Division (//): Der Doppelschrägstrich-Operator verwendet eine hochperformante Integer-Division, wenn beide Eingabewerte Integer sind. Zum Beispiel ergibt 5//3 1 und 5//-3 -1. Wenn einer der beiden Eingabewerte eine Floating-Point-Zahl ist, wird eine Floating-Point-Division durchgeführt und das Ergebnis auf den am nächsten links befindlichen Integer gekürzt. Zum Beispiel ergibt 5//3.0 1.0 und 5.0//-3 -2.0. Obwohl das Ergebnis dieser Floating-Point-Division ein Integer ist, wird es im Floating-Point-Format gespeichert, so dass es von anderen Operationen als solches gesehen wird. Um stattdessen eine Division mit Rest (Modulo) durchzuführen, siehe Mod().

Die Operatoren *= und /= sind Kurzschreibweisen zum Multiplizieren oder Dividieren eines Variablenwerts mit einem anderen Wert. Zum Beispiel liefert Var *= 2 dasselbe Ergebnis wie Var := Var * 2 (obwohl Ersteres performanter ist).

Eine Division durch 0 liefert ein leeres Ergebnis (leere Zeichenkette).

+
-

Addition (+) und Subtraktion (-). Die Operatoren += und -= sind Kurzschreibweisen zum Erhöhen oder Verringern eines Variablenwerts um einen beliebigen Wert. Zum Beispiel liefert Var += 2 dasselbe Ergebnis wie Var := Var + 2 (obwohl Ersteres performanter ist). Ebenso kann eine Variable mit Var++, Var--, ++Var oder --Var schrittweise um 1 erhöht oder verringert werden.

<<
>>
>>>

Bitweise Verschiebung nach links (<<). Anwendungsbeispiel: Wert1 << Wert2. Entspricht der Multiplikation von Wert1 mit "2 hoch Wert2".

Arithmetische bitweise Verschiebung nach rechts (>>). Anwendungsbeispiel: Wert1 >> Wert2. Entspricht der Division von Wert1 durch "2 hoch Wert2" und der Rundung des Ergebnisses auf den am nächsten links befindlichen Integer. Zum Beispiel ergibt -3>>1 -2.

Logische bitweise Verschiebung nach rechts (>>>) [v1.1.35+]. Anwendungsbeispiel: Wert1 >>> Wert2. Im Gegensatz zur arithmetischen bitweisen Verschiebung nach rechts wird bei dieser Verschiebung das Vorzeichen der Zahl nicht beibehalten. Zum Beispiel hat -1 die gleiche Bitdarstellung wie der vorzeichenlose 64-Bit-Integer 0xffffffffffffffffff, daher ist -1 >>> 1 0x7fffffffffffffffff.

Bei allen drei Operatoren werden Floating-Point-Eingabewerte vor der Berechnung auf einen Integer gekürzt. Die Ergebnisse sind undefiniert, wenn Wert2 kleiner als 0 oder größer als 63 ist.

&
^
|
Bitweises UND (&), bitweises exklusives ODER (^) und bitweises ODER (|). Von diesen drei Operatoren hat & die höchste Priorität und | die niedrigste Priorität. Jeder Floating-Point-Eingabewert wird vor der Berechnung auf einen Integer gekürzt.
.

Verkettung. Ein Punkt mit mindestens einem Leer- oder Tabulatorzeichen auf beiden Seiten wird verwendet, um zwei Elemente zu einer einzelnen Zeichenkette zu kombinieren. Dasselbe kann auch ohne diesen Punkt erzielt werden (außer bei Mehrdeutigkeiten wie x -y oder wenn dem rechts befindlichen Element ein ++ oder -- vorangestellt ist). Wenn der Punkt weggelassen wird, muss zwischen den Elementen mindestens ein Leer- oder Tabulatorzeichen stehen.

Var := "Die Farbe ist " . GefundeneFarbe  ; Explizite Verkettung
Var := "Die Farbe ist " GefundeneFarbe    ; Auto-Verkettung

Teilausdrücke können auch verkettet werden. Zum Beispiel: Var := "Der Nettopreis ist " . Preis * (1 - Rabatt/100).

Eine Zeile, die mit einem Punkt (oder einem anderen Operator) beginnt, wird automatisch mit der darüber liegenden Zeile verbunden.

~= [AHK_L 31+]: Kurzschreibweise für RegExMatch(). Zum Beispiel bewirkt "abc123" ~= "\d", dass ErrorLevel auf 0 gesetzt und 4 (die Position des ersten numerischen Zeichens) zurückgegeben wird. Vor [v1.1.03] hatte dieser Operator dieselbe Priorität wie der Gleichheitsoperator (=) und war unvollständig dokumentiert.
>   <
>= <=

Größer (>), kleiner (<), größer gleich (>=) und kleiner gleich (<=). Wenn beide Eingabewerte Zahlen oder numerische Zeichenketten sind, werden sie numerisch verglichen, andernfalls werden sie alphabetisch verglichen. Der Vergleich ist nur Groß-/Kleinschreibung-sensitiv, wenn StringCaseSense eingeschaltet ist. Siehe auch: Sort

Hinweis: In AutoHotkey v1 wird eine in Anführungszeichen gesetzte Zeichenkette (oder das Ergebnis einer Verkettung mit einer in Anführungszeichen gesetzte Zeichenkette) nie als numerisch angesehen, wenn sie direkt in einem Ausdruck verwendet wird.

=
==
<> !=
!==

Gleich (=), Groß-/Kleinschreibung-sensitiv gleich (==) und ungleich (<> oder !=). Wenn beide Eingabewerte Zahlen oder numerische Zeichenketten sind, werden sie numerisch verglichen, andernfalls werden sie alphabetisch verglichen. Die Operatoren != und <> sind funktionsgleich. Die Operatoren == und = verhalten sich gleich, wenn beide Eingabewerte numerisch sind, es sei denn, einer der Eingabewerte ist nicht numerisch, dann ist == immer Groß-/Kleinschreibung-sensitiv und = immer nicht-Groß-/Kleinschreibung-sensitiv (die Methode der Nichtsensitivität hängt von StringCaseSense ab). Die Operatoren <> und != hingegen berücksichtigen StringCaseSense.

Groß-/Kleinschreibung-sensitiv ungleich (!==) [v1.1.35+]. Verhält sich identisch zu ==, außer dass das Ergebnis invertiert wird.

Hinweis: In AutoHotkey v1 wird eine in Anführungszeichen gesetzte Zeichenkette (oder das Ergebnis einer Verkettung mit einer in Anführungszeichen gesetzte Zeichenkette) nie als numerisch angesehen, wenn sie direkt in einem Ausdruck verwendet wird.

Veraltet: Der Operator <> ist nicht für neue Skripte empfohlen. Verwenden Sie stattdessen den Operator !=.

NOT Logisches NICHT. Abgesehen von der niedrigeren Priorität ist dies dasselbe wie der !-Operator. Zum Beispiel ist not (x = 3 or y = 3) dasselbe wie !(x = 3 or y = 3).
AND
&&
Beide Operatoren sind ein logisches UND. Zum Beispiel: x > 3 and x < 10. Zur Verbesserung der Performanz wird die Kurzschlussauswertung angewendet. Eine Zeile, die mit AND/OR/&&/|| (oder einem anderen Operator) beginnt, wird automatisch mit der darüber liegenden Zeile verbunden.
OR
||
Beide Operatoren sind ein logisches ODER. Zum Beispiel: x <= 3 or x >= 10. Zur Verbesserung der Performanz wird die Kurzschlussauswertung angewendet.
?: Ternärer Operator [v1.0.46+]. Dieser Operator ist die Kurzschreibweise für eine if-else-Anweisung. Er wertet die Bedingung auf seiner linken Seite aus, um zu bestimmen, welche seiner beiden Verzweigungen als Endergebnis dienen soll. Zum Beispiel bewirkt Var := x>y ? 2 : 3, dass 2 in Var gespeichert wird, wenn x größer als y ist, andernfalls wird 3 gespeichert. Zur Verbesserung der Performanz wird nur die gewinnende Verzweigung ausgewertet (siehe Kurzschlussauswertung).
:=
+=
-=
*=
/=
//=
.=
|=
&=
^=
>>=
<<=
>>>=

Zuweisung. Führt eine Operation am Inhalt einer Variable durch und speichert das Ergebnis wieder in dieselbe Variable (aber vor v1.0.46 konnten diese nur als Operator ganz links in einer Zeile verwendet werden, außerdem wurden nur die ersten fünf Operatoren unterstützt). Der einfachste Zuweisungsoperator ist Doppelpunkt-Gleich (:=), der das Ergebnis eines Ausdrucks in eine Variable speichert. Eine Beschreibung der anderen Operatoren finden Sie in den entsprechenden Einträgen dieser Tabelle. Zum Beispiel führt Var //= 2 eine Floor-Division durch, um Var durch 2 zu teilen, und speichert das Ergebnis wieder in Var. Ein weiteres Beispiel ist Var .= "abc", was die Kurzschreibweise für Var := Var . "abc" ist.

Im Gegensatz zu den meisten anderen Operatoren werden Zuweisungen von rechts nach links ausgewertet. Folglich bewirkt eine Zeile wie Var1 := Var2 := 0, dass zuerst 0 in Var2 und dann Var2 in Var1 gespeichert wird.

Wenn eine Zuweisung als Eingabe für einen anderen Operator verwendet wird, ist der Eingabewert die Variable selbst. Zum Beispiel ist der Ausdruck (Var += 2) > 50 wahr, wenn der soeben erhöhte Wert in Var größer als 50 ist. Dies ermöglicht auch die Übergabe einer Zuweisung als ByRef oder die Verwendung ihrer Adresse, z.B. &(x:="abc").

Die Priorität der Zuweisungsoperatoren wird automatisch erhöht, wenn dadurch ein Syntaxfehler vermieden oder ein intuitiveres Verhalten erreicht wird. Zum Beispiel: not x := y ist äquivalent zu not (x := y). Außerdem wird x==y && z:=1 als x==y && (z:=1) ausgewertet, und kurzgeschlossen, wenn x ungleich y ist. Ebenso wird ++Var := X als ++(Var := X) und Z > 0 ? X := 2 : Y := 2 als Z > 0 ? (X := 2) : (Y := 2) ausgewertet.

>>>= benötigt [v1.1.35+].

Bekannte Einschränkungen durch Abwärtskompatibilität (die eventuell in einer zukünftigen Version behoben werden): 1) Wenn /= der Operator ganz links in einem Ausdruck ist und nicht zu einer Mehrfachanweisung gehört, führt dieser Operator eine Floor-Division durch, es sei denn, eine der Eingaben ist eine Floating-Point-Zahl (in allen anderen Fällen führt /= eine echte Division durch); 2) Datum/Zeit-Berechnungen mit += und -= sind nur möglich, wenn dieser Operator der Operator ganz links in der Zeile ist; 3) Die Operatoren +=, -= und *= behandeln leere Variablen als 0, aber nur, wenn sie einzeln in einer Zeile stehen; zum Beispiel erzeugen sowohl y := 1, x += 1 als auch MsgBox % x -= 3 ein leeres Ergebnis, wenn x leer ist.

,

Komma (Mehrfachanweisung) [v1.0.46+]. Kommas können verwendet werden, um mehrere Teilausdrücke auf eine Zeile zu schreiben. Dies wird üblicherweise verwendet, um mehrere Zuweisungen oder Funktionsaufrufe zu gruppieren. Zum Beispiel: x:=1, y+=2, ++index, MeineFunk(). Solche Anweisungen werden von links nach rechts ausgeführt.

Hinweis: Eine Zeile, die mit einem Komma (oder einem anderen Operator) beginnt, wird automatisch mit der darüber liegenden Zeile verbunden. Siehe auch: Kommaperformanz.

[v1.0.46.01+]: Wenn direkt nach einem Komma eine Variable und ein Gleichheitszeichen folgt, wird dieses Gleichheitszeichen automatisch als Doppelpunkt-Gleich-Zuweisung (:=) behandelt. Zum Beispiel enthält Folgendes nur Zuweisungen: x:=1, y=2, a=b=c. Neue Skripte sollten sich nicht auf dieses Verhalten verlassen, da es sich noch ändern kann. Diese Regel gilt nur für reine Variablen, nicht für Doppeldereferenzen (double-derefs), z.B. enthält Folgendes nur eine Zuweisung: x:=1, %y%=2

[v1.0.48+]: Kommagetrennte Ausdrücke sind in der Regel performanter als einzeln geschriebene Ausdrücke, insbesondere bei der Zuweisung einer Variable an eine andere (z.B. x:=y, a:=b). Je mehr Ausdrücke zu einem einzigen Ausdruck zusammengefasst werden, desto höher ist die Performanz. Zum Beispiel kann ein Geschwindigkeitszuwachs von 35 % erreicht werden, wenn fünf oder zehn einfache Ausdrücke zu einem einzigen Ausdruck kombiniert werden.

Die folgenden Arten von Teilausdrücken überschreiben die Priorität bzw. die Reihenfolge der Auswertung:

Ausdruck Beschreibung
(Ausdruck)

Ein beliebiger Teilausdruck in runden Klammern. Zum Beispiel bewirkt (3 + 2) * 2, dass 3 + 2 zuerst ausgewertet wird.

Bei einer Mehrfachanweisung wird das Ergebnis der ersten Anweisung zurückgegeben. Zum Beispiel bewirkt (a := 1, b := 2, c := 3), dass 1 zurückgegeben wird.

Mod()
Round()
Abs()

Funktionsaufruf. Direkt nach dem Funktionsnamen muss eine runde Klammer stehen, d.h. zwischen dem Namen und der Klammer sind keine Leer- oder Tabulatorzeichen erlaubt. Einzelheiten finden Sie unter Funktionen.

%func%()

Siehe Funktionen dynamisch aufrufen.
func.()

Veraltet: Diese Syntax wird nicht empfohlen. Verwenden Sie stattdessen %func%() (für Funktionsnamen und -objekte) oder func.Call() (für Funktionsobjekte).

[AHK_L 48+]: Versucht, eine namenlose Methode des Objekts func aufzurufen. Konventionsgemäß ist das die "Standardmethode" des Objekts. Wenn func kein Objekt enthält, wird stattdessen indirekt das Standardbasisobjekt aufgerufen.

[v1.0.95+]: Wenn func einen Funktionsnamen enthält, wird die benannte Funktion aufgerufen.

Fn(Params*)

[AHK_L 60+]: Variadischer Funktionsaufruf. Params ist ein Array (Objekt) mit Parameterwerten.

x[y]
[a, b, c]

[AHK_L 31+]: Objektelementzugriff. Abrufen (Get), Setzen (Set) oder Aufrufen (Call) einer Methode des Objekts x, wobei y eine Parameterliste (typischerweise ein Array-Index oder Schlüssel) oder ein Ausdruck ist, der einen Methodennamen zurückgibt.

[v1.0.97+]: Direkt geschriebenes Array. Wenn der eckigen Klammer kein Wert (oder kein Teilausdruck, der einen Wert zurückgibt) vorangestellt ist, wird die Klammer als Beginn eines direkt geschriebenen Arrays interpretiert. Zum Beispiel ist [a, b, c] äquivalent zu Array(a, b, c) (a, b und c sind Variablen).

Weitere Informationen finden Sie unter Arraysyntax und Objektsyntax.

{a: b, c: d}

[v1.0.97+]: Direkt geschriebenes Objekt. Ein Objekt bzw. assoziatives Array erstellen. Zum Beispiel ist x := {a: b} äquivalent zu x := Object("a", b) oder x := Object(), x.a := b. Weitere Informationen finden Sie unter Assoziative Arrays.

Interne Variablen

Die folgenden Variablen sind fest in das Programm integriert und können normal referenziert werden.

Allgemeine Informationen finden Sie unter Interne Variablen.

Inhaltsverzeichnis

Sonderzeichen

Variable Beschreibung
A_Space Diese Variable enthält ein einzelnes Leerzeichen. Siehe AutoTrim für Details.
A_Tab Diese Variable enthält ein einzelnes Tabulatorzeichen. Siehe AutoTrim für Details.

Skripteigenschaften

Variable Beschreibung
1, 2, 3, etc. Diese Variablen werden automatisch erstellt, wenn ein Skript mit Befehlszeilenparametern gestartet wird. Sie können wie normale Variablennamen geändert oder abgerufen werden (z.B. %1%), aber nicht direkt in einem Ausdruck referenziert werden. Die Variable %0% enthält die Anzahl der übergebenen Parameter (andernfalls 0). Einzelheiten finden Sie unter Befehlszeilenparameter.
A_Args
[v1.1.27+]
Enthält ein Array von Befehlszeilenparametern. Einzelheiten finden Sie unter Befehlszeilenparameter an ein Skript übergeben.
A_WorkingDir Das aktuelle Arbeitsverzeichnis, von dem aus das Skript standardmäßig auf Dateien zugreift. Der letzte umgekehrte Schrägstrich ist nicht enthalten, es sei denn, es handelt sich um das Stammverzeichnis. Zwei Beispiele: C:\ und C:\Meine Dokumente. Mit SetWorkingDir kann das Arbeitsverzeichnis geändert werden.
A_InitialWorkingDir
[v1.1.35+]
Das anfängliche Arbeitsverzeichnis des Skripts, abhängig davon, wie das Skript gestartet wurde. Wenn das Skript z.B. über eine Verknüpfung (z.B. im Startmenü) gestartet wurde, richtet sich dessen anfängliches Arbeitsverzeichnis nach dem Feld "Ausführen in" im Eigenschaftenfenster der Verknüpfung.
A_ScriptDir Der vollständige Pfadname des Verzeichnisses, das das aktuelle Skript enthält. Der letzte umgekehrte Schrägstrich wird weggelassen (auch bei Stammverzeichnissen).
A_ScriptName

Der Dateiname des aktuellen Skripts ohne Pfadangabe, z.B. MeinSkript.ahk

Wenn das Skript kompiliert oder eingebettet ist, enthält diese Variable den Namen der aktuellen EXE-Datei.

A_ScriptFullPath

Der vollständige Pfadname des aktuellen Skripts, z.B. C:\Skripte\MeinSkript.ahk

Wenn das Skript kompiliert oder eingebettet ist, enthält diese Variable den vollständigen Pfadnamen der aktuellen EXE-Datei.

A_ScriptHwnd
[v1.1.01+]
Die HWND-Nummer (eindeutige ID) des versteckten Hauptfensters des Skripts.
A_LineNumber

Die Nummer der aktuell ausgeführten Zeile innerhalb des Skripts (oder innerhalb einer #Include-Datei, falls vorhanden). Diese Zeilennummer entspricht der via ListLines angezeigten Zeilennummer; dies ist z.B. nützlich, um einen Fehler zu melden: MsgBox, Konnte nicht in die Logdatei schreiben (Zeile Nr. %A_LineNumber%)

Da bei einer Skriptkompilierung alle #Include-Dateien zu einem großen Skript zusammengefasst werden, kann die Zeilennummerierung von der im unkompilierten Modus abweichen.

A_LineFile

Der vollständige Pfadname der Datei, zu der A_LineNumber gehört. Wenn das Skript aus einer externen Datei geladen wurde, ist diese Variable äquivalent zu A_ScriptFullPath, es sei denn, die Zeile gehört zu einer der #Include-Dateien des Skripts.

Wenn das Skript mit einer BIN-Datei kompiliert wurde, enthält diese Variable den vollständigen Pfadnamen der aktuellen EXE-Datei, äquivalent zu A_ScriptFullPath.

[v1.1.34+]: Wenn das Skript eingebettet ist, enthält A_LineFile ein Sternchen (*), gefolgt vom Namen der Ressource, z.B. *#1

A_ThisFunc
[v1.0.46.16+]
Der Name der benutzerdefinierten Funktion, die gerade ausgeführt wird (andernfalls leer), z.B. MeineFunktion. Siehe auch: IsFunc()
A_ThisLabel
[v1.0.46.16+]
Der Name des Labels (Subroutine), das gerade ausgeführt wird (andernfalls leer), z.B. MeinLabel. Diese Variable wird jedes Mal aktualisiert, wenn das Skript Gosub/Return oder Goto ausführt. Sie wird auch aktualisiert, wenn ein Label automatisch durch Timer, GUI-Threads, Menüpunkte, Hotkeys, Hotstrings, OnClipboardChange-Labels und OnExit-Labels aufgerufen wird. A_ThisLabel wird jedoch nicht aktualisiert, wenn die Skriptausführung in eines der oben genannten Labels "hineinfällt"; in diesem Fall behält A_ThisLabel den vorherigen Wert. Siehe auch: A_ThisHotkey und IsLabel()
A_AhkVersion In den Versionen vor 1.0.22 ist diese Variable leer. A_AhkVersion enthält die Version von AutoHotkey, mit der das Skript ausgeführt wird, z.B. 1.0.22. Im Falle eines kompilierten Skripts enthält diese Variable die Version, mit der das Skript ursprünglich kompiliert wurde. Der Aufbau der Versionsnummer erlaubt es, mit ">" oder ">=" zu prüfen, ob A_AhkVersion größer als eine bestimmte Mindestversionsnummer ist. Zum Beispiel: if A_AhkVersion >= 1.0.25.07. Siehe auch: #Requires und VerCompare()
A_AhkPath

Für unkompilierte oder eingebettete Skripte: Der vollständige Pfadname der EXE-Datei, mit der das aktuelle Skript gerade ausgeführt wird. Zum Beispiel: C:\Program Files\AutoHotkey\AutoHotkey.exe

Für kompilierte Skripte, die auf einer BIN-Datei basieren, wird der Wert ermittelt, indem das Installationsverzeichnis aus der Registry gelesen und "\AutoHotkey.exe" angefügt wird. Wenn AutoHotkey nicht installiert ist, ist der Wert leer. Das folgende Beispiel ist äquivalent:

RegRead InstallDir, HKLM\SOFTWARE\AutoHotkey, InstallDir
AhkPath := ErrorLevel ? "" : InstallDir "\AutoHotkey.exe"

[v1.1.34+]: Für kompilierte Skripte, die auf einer EXE-Datei basieren, enthält A_AhkPath den vollständigen Pfadnamen des kompilierten Skripts. Dies kann in Kombination mit /script verwendet werden, um externe Skripte auszuführen. Um stattdessen die installierte Kopie von AutoHotkey zu lokalisieren, lesen Sie die Registry wie oben gezeigt.

A_IsUnicode

Enthält 1, wenn Zeichenketten im Unicode-Format (16-Bit) sind, oder eine leere Zeichenkette (was als falsch angesehen wird), wenn Zeichenketten im ANSI-Format (8-Bit) sind. Das Format der Zeichenketten richtet sich nach der Version von AutoHotkey.exe, mit der das Skript ausgeführt wird, oder, falls es kompiliert wurde, nach der BIN-Datei, mit der es kompiliert wurde.

Bei ANSI-EXE-Dateien vor [v1.1.06] blieb A_IsUnicode undefiniert; das heißt, dass das Skript dieser Variable einen Wert zuweisen konnte und dass der Versuch, sie zu lesen, eine UseUnsetGlobal-Warnung auslösen konnte. In späteren Versionen ist diese Variable immer definiert und schreibgeschützt.

A_IsCompiled

Enthält 1, wenn das Skript als kompilierte EXE-Datei ausgeführt wird, andernfalls eine leere Zeichenkette (was als falsch angesehen wird).

Bei unkompilierten Skripten vor [v1.1.06] blieb A_IsCompiled undefiniert; das heißt, dass das Skript dieser Variable einen Wert zuweisen konnte und dass der Versuch, sie zu lesen, eine UseUnsetGlobal-Warnung auslösen konnte. In späteren Versionen ist diese Variable immer definiert und schreibgeschützt.

A_ExitReason Der aktuellste Grund für die Beendigung des Skripts. Diese Variable ist leer, es sei denn, das Skript hat eine OnExit-Subroutine, die gerade ausgeführt wird oder mindestens einmal durch einen Exitversuch aufgerufen wurde. Einzelheiten finden Sie unter OnExit.

Datum und Zeit

Variable Beschreibung
A_YYYY

Das aktuelle 4-stellige Jahr (z.B. 2004). A_Year enthält denselben Wert.

Hinweis: Um die formatierte Version einer Uhrzeit oder eines Datums gemäß Ihrer aktuellen Sprach- und Regionseinstellungen abzurufen, verwenden Sie FormatTime, AusgabeVar (Uhrzeit und langes Datum) oder FormatTime, AusgabeVar,, LongDate (langes Datumformat).

A_MM Der aktuelle 2-stellige Monat (01-12). A_Mon enthält denselben Wert.
A_DD Der aktuelle 2-stellige Tag des Monats (01-31). A_MDay enthält denselben Wert.
A_MMMM Der aktuelle vollständige Monatsname in der aktuellen Sprache des Benutzers, z.B. Juli
A_MMM Der aktuelle abgekürzte Monatsname in der aktuellen Sprache des Benutzers, z.B. Jul
A_DDDD Der aktuelle vollständige Wochentagsname in der aktuellen Sprache des Benutzers, z.B. Sonntag
A_DDD Der aktuelle abgekürzte Wochentagsname in der aktuellen Sprache des Benutzers, z.B. So
A_WDay Der aktuelle 1-stellige Wochentag (1-7). 1 ist Sonntag in allen Sprach- und Regionseinstellungen.
A_YDay Der aktuelle Tag des Jahres (1-366). Der Wert enthält keine führenden Nullen, z.B. wird 9 abgerufen, nicht 009. Um einen Wert mit führenden Nullen abzurufen, verwenden Sie folgendes: FormatTime, AusgabeVar, , YDay0.
A_YWeek Aktuelles Jahr und aktuelle Kalenderwoche (z.B. 200453) gemäß ISO 8601. Um das Jahr von der Woche zu trennen, verwenden Sie Jahr := SubStr(A_YWeek, 1, 4) und Woche := SubStr(A_YWeek, -1). Genaue Definition von A_YWeek: Wenn die Woche mit dem 1. Januar mindestens vier Tage im neuen Jahr hat, ist sie Woche 1. Andernfalls ist sie die letzte Woche des Vorjahres und die nächste Woche die erste Woche des neuen Jahres.
A_Hour Die aktuelle 2-stellige Stunde (00-23) im 24-Stunden-Format. Um die Zeit im 12-Stunden-Format mit einem AM/PM-Indikator abzurufen, gehen Sie wie folgt vor: FormatTime, AusgabeVar, , h:mm:ss tt
A_Min

Die aktuelle 2-stellige Minute (00-59).

A_Sec Die aktuelle 2-stellige Sekunde (00-59).
A_MSec Die aktuelle 3-stellige Millisekunde (000-999). Die führenden Nullen können z.B. wie folgt entfernt werden: Millisekunden := A_MSec + 0.
A_Now

Die aktuelle Ortszeit im YYYYMMDDHH24MISS-Format.

Hinweis: Datums- und Zeitberechnungen können mit EnvAdd und EnvSub durchgeführt werden. Außerdem können Sie FormatTime verwenden, um das Datum und/oder die Uhrzeit gemäß Ihrer aktuellen Sprach- und Regionseinstellungen zu formatieren.

A_NowUTC Die aktuelle koordinierte Weltzeit (engl. Coordinated Universal Time, kurz UTC) im YYYYMMDDHH24MISS-Format. UTC ist grundsätzlich dasselbe wie die mittlere Greenwich-Zeit (engl. Greenwich Mean Time, kurz GMT).
A_TickCount

Die seit dem Systemstart verstrichene Zeit in Millisekunden, bis zu einem Maximum von 49,7 Tagen. Um diese verstrichene Zeit zu messen, speichern Sie A_TickCount in eine Variable und subtrahieren Sie diese später vom aktuellen A_TickCount-Wert. Zum Beispiel:

StartZeit := A_TickCount
Sleep, 1000
VerstricheneZeit := A_TickCount - StartZeit
MsgBox,  %VerstricheneZeit% Millisekunden sind verstrichen.

Wenn Sie eine höhere Genauigkeit als die 10 ms von A_TickCount benötigen, verwenden Sie QueryPerformanceCounter().

Skripteinstellungen

Variable Beschreibung
A_IsSuspended Enthält 1, wenn das Skript suspendiert ist, andernfalls 0.
A_IsPaused
[v1.0.48+]
Enthält 1, wenn der Thread direkt unterhalb des aktuellen Threads pausiert ist, andernfalls 0.
A_IsCritical
[v1.0.48+]
Enthält 0, wenn Critical im aktuellen Thread ausgeschaltet ist. Andernfalls enthält A_IsCritical einen Integer größer als 0, nämlich das von Critical verwendete Meldungsüberprüfintervall. Da Critical 0 den kritischen Status eines Threads ausschaltet, kann der aktuelle Status von Critical via Alt_IsCritical := A_IsCritical gespeichert und später via Critical %Alt_IsCritical% wiederhergestellt werden.
A_BatchLines (oder A_NumBatchLines) Der aktuell via SetBatchLines gesetzte Wert. Beispiele: 200 oder 10ms (abhängig vom Format).
A_ListLines
[v1.1.28+]
Enthält 1, wenn ListLines eingeschaltet ist, andernfalls 0.
A_TitleMatchMode Der aktuell via SetTitleMatchMode gesetzte Modus (1, 2, 3 oder RegEx).
A_TitleMatchModeSpeed Die aktuell via SetTitleMatchMode gesetzte Übereinstimmungsgeschwindigkeit (Fast oder Slow).
A_DetectHiddenWindows Der aktuell via DetectHiddenWindows gesetzte Modus (On oder Off).
A_DetectHiddenText Der aktuell via DetectHiddenText gesetzte Modus (On oder Off).
A_AutoTrim Der aktuell via AutoTrim gesetzte Modus (On oder Off).
A_StringCaseSense Der aktuell via StringCaseSense gesetzte Modus (On, Off oder Locale).
A_FileEncoding [AHK_L 46+]: Enthält die Standardkodierung für verschiedene Befehle; siehe FileEncoding.
A_FormatInteger Das aktuell via SetFormat gesetzte Integer-Format (H oder D). [AHK_L 42+]: Kann auch ein kleines h enthalten.
A_FormatFloat Das aktuell via SetFormat gesetzte Floating-Point-Format.
A_SendMode [v1.1.23+]: Der aktuell via SendMode gesetzte Modus (Event, Input, Play oder InputThenPlay).
A_SendLevel [v1.1.23+]: Die aktuelle SendLevel-Einstellung (ein Integer im Bereich von 0 bis 100).
A_StoreCapsLockMode [v1.1.23+]: Der aktuell via SetStoreCapsLockMode gesetzte Modus (On oder Off).
A_KeyDelay
A_KeyDuration
Die aktuell via SetKeyDelay gesetzte Verzögerung oder Dauer (immer dezimal, nicht hexadezimal). A_KeyDuration benötigt [v1.1.23+].
A_KeyDelayPlay
A_KeyDurationPlay
Die aktuell via SetKeyDelay gesetzte Verzögerung oder Dauer für den SendPlay-Modus (immer dezimal, nicht hexadezimal). Benötigt [v1.1.23+].
A_WinDelay Die aktuell via SetWinDelay gesetzte Verzögerung (immer dezimal, nicht hexadezimal).
A_ControlDelay Die aktuell via SetControlDelay gesetzte Verzögerung (immer dezimal, nicht hexadezimal).
A_MouseDelay
A_MouseDelayPlay
Die aktuell via SetMouseDelay gesetzte Verzögerung (immer dezimal, nicht hexadezimal). A_MouseDelay gilt für den traditionellen SendEvent-Modus, A_MouseDelayPlay für den SendPlay-Modus. A_MouseDelayPlay benötigt [v1.1.23+].
A_DefaultMouseSpeed Die aktuell via SetDefaultMouseSpeed gesetzte Geschwindigkeit (immer dezimal, nicht hexadezimal).
A_CoordModeToolTip
A_CoordModePixel
A_CoordModeMouse
A_CoordModeCaret
A_CoordModeMenu
[v1.1.23+]: Der aktuell via CoordMode gesetzte Modus (Window, Client oder Screen).
A_RegView [v1.1.08+]: Die aktuell via SetRegView gesetzte Registry-Ansicht.
A_IconHidden Enthält 1, wenn das Tray-Symbol gerade versteckt ist, andernfalls 0. Das Symbol kann mit der #NoTrayIcon-Direktive oder dem Menu-Befehl versteckt werden.
A_IconTip Leer, es sei denn, für das Tray-Symbol wurde via Menu, Tray, Tip ein benutzerdefinierter Tooltip definiert, dann ist der Text des Tooltips enthalten.
A_IconFile Leer, es sei denn, ein benutzerdefiniertes Tray-Symbol wurde via Menu, Tray, Icon definiert, dann ist der vollständige Pfadname der Datei des neuen Symbols enthalten.
A_IconNumber Leer, wenn A_IconFile leer ist. Andernfalls ist die Nummer der Symbolgruppe enthalten, die in A_IconFile verwendet wird (üblicherweise 1).

Inaktivität des Benutzers

Variable Beschreibung
A_TimeIdle

Die Zeit in Millisekunden, die seit der letzten Eingabe via Tastatur, Maus usw. verstrichen ist. Dies ist nützlich, um festzustellen, ob der Benutzer abwesend ist. Physische Benutzereingaben sowie künstlich erzeugte Eingaben durch ein beliebiges Programm oder Skript (z.B. via Send- oder MouseMove-Befehl) setzen diesen Wert auf 0 zurück. Da dieser Wert tendenziell in 10er-Schritten ansteigt, sollte nicht geprüft werden, ob er mit einem anderen Wert übereinstimmt. Prüfen Sie stattdessen, ob dieser Wert größer oder kleiner als ein anderer Wert ist. Zum Beispiel:

If A_TimeIdle > 600000
    MsgBox, Die letzte Aktivität war vor 10 Minuten
A_TimeIdlePhysical Ähnlich wie oben, allerdings werden künstliche Tastendrücke und/oder Mausklicks ignoriert, wenn der entsprechende Hook (Tastatur oder Maus) installiert ist, d.h. diese Variable reagiert nur auf physische Ereignisse. Dadurch wird verhindert, dass simulierte Tastendrücke und Mausklicks fälschlicherweise die Aktivität des Benutzers vortäuschen. Wenn keine Hooks installiert sind, ist diese Variable äquivalent zu A_TimeIdle. Wenn nur ein Hook installiert ist, wird A_TimeIdlePhysical nur von dieser Art der physischen Eingabe beeinflusst (die Eingabe des anderen/nicht-installierten Hooks hat weder physisch noch künstlich eine Auswirkung).
A_TimeIdleKeyboard
[v1.1.28+]
Wenn der Tastatur-Hook installiert ist, enthält diese Variable die Zeit in Millisekunden, die seit der letzten physischen Tastatureingabe verstrichen ist. Andernfalls ist diese Variable äquivalent zu A_TimeIdle.
A_TimeIdleMouse
[v1.1.28+]
Wenn der Maus-Hook installiert ist, enthält diese Variable die Zeit in Millisekunden, die seit der letzten physischen Mauseingabe verstrichen ist. Andernfalls ist diese Variable äquivalent zu A_TimeIdle.

GUI-Fenster und Menüleisten

Variable Beschreibung
A_DefaultGui [v1.1.23+] Name oder Nummer der Standard-GUI des aktuellen Threads.
A_DefaultListView [v1.1.23+] Variablenname oder HWND des ListView-Steuerelements, mit dem die ListView-Funktionen arbeiten. Wenn die Standard-GUI keine ListView hat, ist diese Variable leer.
A_DefaultTreeView [v1.1.23+] Variablenname oder HWND des TreeView-Steuerelements, mit dem die TreeView-Funktionen arbeiten. Wenn die Standard-GUI keine TreeView hat, ist diese Variable leer.
A_Gui Name oder Nummer der GUI, die den aktuellen Thread gestartet hat. Diese Variable ist leer, es sei denn, ein GUI-Steuerelement, Menüpunkt oder Ereignis wie GuiClose/GuiEscape hat den aktuellen Thread gestartet.
A_GuiControl Der Name der zugeordneten Variable des GUI-Steuerelements, das den aktuellen Thread gestartet hat. Wenn dieses Steuerelement keine zugeordnete Variable hat, enthält A_GuiControl stattdessen den Text oder die Beschriftung des Steuerelements, bis zu einer Länge von 63 Zeichen (dies wird meist verwendet, um zu vermeiden, jeder Schaltfläche einen Variablennamen zu geben). A_GuiControl ist leer, wenn: 1) A_Gui leer ist; 2) ein GUI-Menüpunkt oder Ereignis wie GuiClose/GuiEscape den aktuellen Thread gestartet hat; 3) das Steuerelement keine zugeordnete Variable und Beschriftung hat; oder 4) das Steuerelement, das den aktuellen Thread ursprünglich gestartet hat, nicht mehr existiert (z.B. aufgrund von Gui Destroy).
A_GuiWidth
A_GuiHeight
Diese Variablen enthalten die Breite und Höhe des GUI-Fensters für GuiSize-Ereignisse. Diese gelten nur für den Clientbereich des GUI-Fensters (das ist der Bereich ohne Titelleiste, Menüleiste und Rahmen). [v1.1.11+]: Diese Werte werden durch die DPI-Skalierung beeinflusst.
A_GuiX
A_GuiY
Diese Variablen enthalten die X- und Y-Koordinate für GuiContextMenu- und GuiDropFiles-Ereignisse. Die Koordinaten sind relativ zur linken oberen Ecke des Fensters. [v1.1.11+]: Diese Werte werden durch die DPI-Skalierung beeinflusst.
A_GuiEvent
oder A_GuiControlEvent

Die Art des Ereignisses, das den aktuellen Thread gestartet hat. Wenn der Thread nicht durch eine GUI-Aktion gestartet wurde, ist diese Variable leer. Andernfalls enthält sie eine der folgenden Zeichenketten:

Normal: Das Ereignis wurde via Linksklick oder Tastendrücke (z.B. , , , , Tab, Leer oder unterstrichene Tastaturkurzbefehle) ausgelöst. Dieser Wert wird auch für Menüpunkte und spezielle Ereignisse wie GuiClose und GuiEscape verwendet.

DoubleClick: Das Ereignis wurde durch einen Doppelklick ausgelöst. Hinweis: Der erste Klick des Doppelklicks bewirkt immer noch, dass ein Normal-Ereignis ausgelöst wird. Mit anderen Worten, die Subroutine wird zweimal gestartet: Zuerst durch den ersten Klick und dann durch den zweiten Klick.

RightClick: Tritt nur bei GuiContextMenu, ListViews und TreeViews auf.

Kontextabhängige Werte: Siehe GuiContextMenu, GuiDropFiles, Slider, MonthCal, ListView und TreeView.

A_EventInfo

Enthält zusätzliche Informationen über die folgenden Ereignisse:

Hinweis: Jeder Thread hat seine eigenen Werte für A_Gui, A_GuiControl, A_GuiX/Y, A_GuiEvent und A_EventInfo, aber nicht für Variablen wie A_ThisHotkey. Wenn also ein Thread von einem anderen unterbrochen wird, sieht er bei seiner Wiederaufnahme immer noch seine ursprünglichen/korrekten Werte in diesen Variablen.

Hotkeys, Hotstrings und benutzerdefinierte Menüpunkte

Variable Beschreibung
A_ThisMenuItem Der Name des zuletzt ausgewählten benutzerdefinierten Menüpunkts (andernfalls leer).
A_ThisMenu Der Name des Menüs, wo A_ThisMenuItem ausgewählt wurde.
A_ThisMenuItemPos Eine Nummer, die die aktuelle Position von A_ThisMenuItem innerhalb von A_ThisMenu angibt. Der erste Menüpunkt ist 1, der zweite 2 und so weiter. Menütrennlinien werden mitgezählt. Diese Variable ist leer, wenn A_ThisMenuItem leer ist oder innerhalb von A_ThisMenu nicht mehr existiert. Sie ist auch leer, wenn A_ThisMenu selbst nicht mehr existiert.
A_ThisHotkey

Der zuletzt ausgeführte Hotkey oder nicht-automatisch-ersetzende Hotstring (andernfalls leer), z.B. #z. Dieser Wert ändert sich, wenn der aktuelle Thread von einem anderen Hotkey oder Hotstring unterbrochen wird, daher ist es ratsam, diesen Wert sofort in eine andere Variable zu speichern, wenn der originale Wert später für eine andere Subroutine benötigt wird.

Jeder neu erstellte Hotkey - entweder via Hotkey-Befehl oder Zweifach-Doppelpunkt-Label - erhält einen festen Namen, der sich aus dem Tastennamen und der Reihenfolge der Modifikatorsymbolen zusammensetzt und von allen Varianten des Hotkeys verwendet wird.

Jeder neu erstellte Hotstring - entweder via Hotstring-Funktion oder Zweifach-Doppelpunkt-Label - erhält einen festen Namen, der sich aus der auslösenden Zeichenkette und der Sequenz von Optionszeichen zusammensetzt.

Siehe auch: A_ThisLabel

A_PriorHotkey Dasselbe wie oben, aber für den vorherigen Hotkey. Andernfalls leer.
A_PriorKey [v1.1.01+]: Der Name der Taste, die vor dem Drücken oder Loslassen der letzten Taste gedrückt wurde, oder leer, wenn im Tastenverlauf kein entsprechender Tastendruck gefunden werden kann. Alle via Skript erzeugten Eingaben werden ignoriert. Bevor diese Variable verwendet werden kann, muss der Tastatur- oder Maus-Hook installiert und der Tastenverlauf aktiviert sein.
A_TimeSinceThisHotkey Die Zeit in Millisekunden, die seit dem Drücken von A_ThisHotkey verstrichen ist. Dieser Wert ist -1, wenn A_ThisHotkey leer ist.
A_TimeSincePriorHotkey Die Zeit in Millisekunden, die seit dem Drücken von A_PriorHotkey verstrichen ist. Dieser Wert ist -1, wenn A_PriorHotkey leer ist.
A_EndChar Ein Endungszeichen, das der Benutzer zuletzt gedrückt hat, um einen nicht-automatisch-ersetzenden Hotstring auszulösen. Wenn kein Endungszeichen erforderlich war (wegen der *-Option), ist diese Variable leer.

Betriebssystem und Benutzerinformationen

Variable Beschreibung
ComSpec [v1.0.43.08+]
A_ComSpec [v1.1.28+]

Enthält dieselbe Zeichenkette wie die ComSpec-Umgebungsvariable, was üblicherweise der vollständige Pfad zur ausführbaren Datei der Eingabeaufforderung (cmd.exe) ist. Diese Variable wird oft mit Run/RunWait verwendet. Zum Beispiel:

C:\Windows\system32\cmd.exe
A_Temp
[v1.0.43.09+]

Der vollständige Pfadname des Ordners zum Speichern von temporären Dateien. Folgende Orte werden der Reihenfolge nach durchsucht, um den Pfadnamen zu ermitteln: 1) Umgebungsvariable TMP, TEMP oder USERPROFILE; 2) Windows-Verzeichnis. Zum Beispiel:

C:\Users\<Benutzer>\AppData\Local\Temp
A_OSType Der Typ des Betriebssystems. Da AutoHotkey 1.1 nur NT-basierte Betriebssysteme unterstützt, enthält diese Variable immer WIN32_NT. Ältere Versionen von AutoHotkey geben WIN32_WINDOWS zurück, wenn Windows 95/98/ME verwendet wird.
A_OSVersion

Enthält je nach Windows-Version eine der folgenden Zeichenketten: WIN_7 in [AHK_L 42+], WIN_8 in [v1.1.08+], WIN_8.1 in [v1.1.15+], WIN_VISTA, WIN_2003, WIN_XP, WIN_2000.

Beachten Sie, dass das Betriebssystem eine andere Versionsnummer meldet bzw. A_OSVersion einen anderen Wert enthält, wenn der Kompatibilitätsmodus im Eigenschaftenfenster der AutoHotkey-EXE-Datei oder des kompilierten Skripts eingeschaltet wurde.

[v1.1.20+]: Wenn die Systemversion nicht als eine der oben genannten erkannt wird, enthält die Variable eine Zeichenkette im Format "Haupt.Neben.Build". Zum Beispiel ist 10.0.14393 Windows 10 Build 14393, auch bekannt als Version 1607.

; Das folgende Beispiel ist obsolet, da diese Systeme nicht mehr unterstützt werden.
if A_OSVersion in WIN_NT4,WIN_95,WIN_98,WIN_ME  ; Hinweis: Keine Leerzeichen vor oder nach den Kommas.
{
    MsgBox Dieses Skript benötigt Windows 2000/XP oder höher.
    ExitApp
}
A_Is64bitOS [v1.1.08+]: Enthält 1 (true), wenn das System 64-Bit ist, oder 0 (false), wenn es 32-Bit ist.
A_PtrSize [AHK_L 42+]: Enthält die Größe eines Pointers in Bytes. Dieser Wert ist entweder 4 (32-Bit) oder 8 (64-Bit), abhängig davon, mit welcher EXE-Datei das Skript ausgeführt wird.
A_Language Die Standardsprache des Systems als 4-stelliger Code.
A_ComputerName Der Netzwerkname des Computers.
A_UserName Der Anmeldename des Benutzers, der dieses Skript gestartet hat.
A_WinDir Das Windows-Verzeichnis. Zum Beispiel: C:\Windows
A_ProgramFiles
oder ProgramFiles

Das Verzeichnis der Programmdateien (z.B. C:\Programme oder C:\Programme (x86)). Die Umgebungsvariable ProgramFiles enthält üblicherweise denselben Wert.

Für 64-Bit-Systeme (nicht 32-Bit-Systeme) gilt folgendes:

  • Wenn die EXE-Datei, mit der das Skript ausgeführt wird, 32-Bit ist, enthält A_ProgramFiles den Pfadnamen des Ordners "Programme (x86)".
  • Für 32-Bit-Prozesse enthält die Umgebungsvariable ProgramW6432 den Pfadnamen des 64-Bit-Ordners "Programme". In Windows 7 und höher wird sie auch für 64-Bit-Prozesse gesetzt.
  • Die Umgebungsvariable ProgramFiles(x86) enthält den Pfadnamen des 32-Bit-Ordners "Programme (x86)".

[v1.0.43.08+]: Das Präfix "A_" kann weggelassen werden, um den Umstieg auf #NoEnv zu unterstützen.

A_AppData
[v1.0.43.09+]

Der vollständige Pfadname des Ordners, der anwendungsspezifische Daten des aktuellen Benutzers enthält. Zum Beispiel:

C:\Users\<Benutzer>\AppData\Roaming
A_AppDataCommon
[v1.0.43.09+]

Der vollständige Pfadname des Ordners, der anwendungsspezifische Daten aller Benutzer enthält. Zum Beispiel:

C:\ProgramData
A_Desktop

Der vollständige Pfadname des Ordners, der die Desktop-Dateien des aktuellen Benutzers enthält. Zum Beispiel:

C:\Users\<Benutzer>\Desktop
A_DesktopCommon

Der vollständige Pfadname des Ordners, der die Desktop-Dateien aller Benutzer enthält. Zum Beispiel:

C:\Users\Public\Desktop
A_StartMenu

Der vollständige Pfadname des Ordners, der die Startmenü-Dateien des aktuellen Benutzers enthält. Zum Beispiel:

C:\Users\<Benutzer>\AppData\Roaming\Microsoft\Windows\Start Menu
A_StartMenuCommon

Der vollständige Pfadname des Ordners, der die Startmenü-Dateien aller Benutzer enthält. Zum Beispiel:

C:\ProgramData\Microsoft\Windows\Start Menu
A_Programs

Der vollständige Pfadname des Startmenü-Ordners "Programme" des aktuellen Benutzers. Zum Beispiel:

C:\Users\<Benutzer>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
A_ProgramsCommon

Der vollständige Pfadname des Startmenü-Ordners "Programme" aller Benutzer. Zum Beispiel:

C:\ProgramData\Microsoft\Windows\Start Menu\Programs
A_Startup

Der vollständige Pfadname des Startmenü-Ordners "Autostart" des aktuellen Benutzers. Zum Beispiel:

C:\Users\<Benutzer>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
A_StartupCommon

Der vollständige Pfadname des Startmenü-Ordners "Autostart" aller Benutzer. Zum Beispiel:

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
A_MyDocuments

Der vollständige Pfadname des Ordners "Dokumente", der beliebige Dateien (vorzugsweise Dokumente) des aktuellen Benutzers enthält. Im Gegensatz zu den meisten anderen ähnlichen Variablen wird, wenn der Ordner das Stammverzeichnis eines Laufwerks ist, der umgekehrte Schrägstrich am Ende weggelassen (z.B. M: statt M:\). Zum Beispiel:

C:\Users\<Benutzer>\Documents
A_IsAdmin

Enthält 1, wenn der aktuelle Benutzer Adminrechte hat, andernfalls 0.

Wenn das Skript sich selbst mit Adminrechten neu starten soll (oder um diese Rechte vom Benutzer via Dialogfenster einzufordern), verwenden Sie Run *RunAs. Beachten Sie aber, dass die Skriptausführung als Administrator dazu führt, dass alle Programme, die vom Skript gestartet werden, ebenfalls als Administrator ausgeführt werden. Eine mögliche Alternative finden Sie in der FAQ.

A_ScreenWidth
A_ScreenHeight

Die Breite und Höhe des primären Bildschirms in Pixel (z.B. 1024 und 768).

Mit SysGet können die Dimensionen von nicht-primären Bildschirmen abgerufen werden.

Um stattdessen die Breite und Höhe des gesamten Desktops abzurufen (selbst wenn er sich über mehrere Bildschirme erstreckt), verwenden Sie folgendes Beispiel:

SysGet, VirtuelleBreite, 78
SysGet, VirtuelleHöhe, 79

Mit SysGet kann auch der Arbeitsbereich eines Bildschirms abgerufen werden. Dieser Bereich ist in der Regel kleiner als der gesamte Bildschirmbereich, da die Taskleiste und andere registrierte Desktopsymbolleisten ausgeschlossen werden.

A_ScreenDPI [v1.1.11+] Die Anzahl der Pixel pro logischem Zoll entlang der Bildschirmbreite. In einem System mit mehreren anzeigefähigen Bildschirmen ist dieser Wert für alle Bildschirme gleich. Standardmäßig gilt ein DPI-Wert von 96, abhängig von der Textgrößeneinstellung des Systems. Siehe auch Gui -DPIScale.
A_IPAddress1 bis 4 Die IP-Adressen der ersten 4 Netzwerkadapter im Computer.

Sonstiges

Variable Beschreibung
A_Cursor

Der Typ des aktuell angezeigten Mauszeigers. Die Variable enthält eines der folgenden Wörter: AppStarting, Arrow, Cross, Help, IBeam, Icon, No, Size, SizeAll, SizeNESW, SizeNS, SizeNWSE, SizeWE, UpArrow, Wait, Unknown. Die Großbuchstaben hinter Size sind Himmelsrichtungen, z.B. NESW = NorthEast+SouthWest (Nordost+Südwest). Die handförmigen Mauszeiger (Zeigen und Greifen) sind als Unknown klassifiziert.

A_CaretX
A_CaretY

Die aktuelle X- und Y-Koordinate des Textcursors (Texteinfügemarke). Standardmäßig sind die Koordinaten relativ zum aktiven Fenster. Mit CoordMode können die Koordinaten relativ zum gesamten Bildschirm gemacht werden. Wenn kein Fenster aktiv ist oder die Position des Textcursors nicht ermittelt werden kann, sind diese Variablen leer.

Das folgende Skript zeigt die aktuellen Positionsdaten eines Textcursors in einem sich selbst aktualisierenden Tooltip an. Beachten Sie, dass einige Fenster (z.B. bestimmte Versionen von MS Word) immer die gleichen Positionsdaten melden, egal wo sich der Textcursor gerade befindet.

#Persistent
SetTimer, TextcursorAbfragen, 100
return
TextcursorAbfragen:
    ToolTip, X%A_CaretX% Y%A_CaretY%, A_CaretX, A_CaretY - 20
return
Clipboard Kann verwendet werden, um den Inhalt der systeminternen Zwischenablage abzurufen oder zu setzen. Einzelheiten finden Sie unter Clipboard.
A_Clipboard [v1.1.35+]
ClipboardAll Der gesamte Inhalt der Zwischenablage (z.B. Formatierung und Text). Einzelheiten finden Sie unter ClipboardAll.
ErrorLevel Diese Variable wird gesetzt, um den Erfolg oder Misserfolg bestimmter Befehle zu kennzeichnen. Einzelheiten finden Sie unter ErrorLevel.
A_LastError Das Ergebnis der Systemfunktion GetLastError() oder des letzten indirekten Aufrufs eines COM-Objekts. Einzelheiten finden Sie unter DllCall() und Run/RunWait.
True
False

Enthalten 1 und 0. Diese können verwendet werden, um die Lesbarkeit eines Skripts zu verbessern. Einzelheiten finden Sie unter Boolesche Werte.

Loop

Variable Beschreibung
A_Index Enthält die Nummer der aktuellen Schleifenwiederholung (ein 64-Bit-Integer). Sie enthält 1, wenn der Körper der Schleife zum ersten Mal ausgeführt wurde. Beim zweiten Mal enthält sie 2 und so weiter. Wenn eine innere Schleife von einer äußeren Schleife umschlossen ist, hat die innere Schleife Vorrang. A_Index funktioniert in jeder Schleifenvariante, enthält aber außerhalb einer Schleife den Wert 0.
A_LoopFileName, etc. Diese und verwandte Variablen sind nur für Datei-Schleifen relevant.
A_LoopRegName, etc. Diese und verwandte Variablen sind nur für Registry-Schleifen relevant.
A_LoopReadLine Siehe dateilesende Schleife.
A_LoopField Siehe parsende Schleife.

Kapazität und Speicher von Variablen