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, verwenden Sie den Doppelpunkt-Gleich-Operator (:=), gefolgt von einer Zahl, einer in Anführungszeichen gesetzten Zeichenkette oder einem Ausdruck beliebigen Typs. Zum Beispiel:

MeineZahl := 123
MeineZkette := "Dies ist eine direkt geschriebene Zeichenkette."
KopieVonVar := Var

Eine Variable kann nicht explizit gelöscht werden, aber ihr vorheriger Wert kann durch Zuweisung eines neuen Wertes, z.B. einer leeren Zeichenkette, freigegeben werden:

MeineVar := ""

Einer Variable kann auch indirekt ein Wert zugewiesen werden, indem man ihre Referenz nimmt und eine Doppeldereferenz (double-deref) verwendet oder sie an eine Funktion übergibt. Zum Beispiel:

MouseGetPos &x, &y

Den Wert einer Variable zu lesen, der kein Wert zugewiesen wurde, wird als Fehler gewertet. Dieser Zustand kann mit IsSet erkannt werden.

Inhalte von Variablen abrufen: Mit einer Verkettung oder der Format-Funktion kann der Inhalt einer Variable in eine Zeichenkette eingefügt werden. Zum Beispiel:

MsgBox "Der Wert von Var ist " . Var . "."
MsgBox "Der Wert in der Variable namens Var ist " Var "."
MsgBox Format("Var hat den Wert {1}.", Var)

Teilausdrücke können auf dieselbe Weise mit Zeichenketten kombiniert werden. Zum Beispiel:

MsgBox("Die Summe von X und Y ist " . (X + Y))

Variablen vergleichen: Bitte lesen Sie sich den folgenden Abschnitt durch, um zu erfahren, welche Vergleiche es gibt.

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.

Reine Wörter in Ausdrücken werden als Variablennamen interpretiert. 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. Einfache Anführungszeichen (') und doppelte Anführungszeichen (") sind funktionsgleich, außer dass eine Zeichenkette, die von einfachen Anführungszeichen umschlossen ist, direkt geschriebene doppelte Anführungszeichen enthalten kann, und umgekehrt. Um daher ein tatsächliches Anführungszeichen in eine direkt geschriebene Zeichenkette einzufügen, versehen Sie das Anführungszeichen mit einem Escapezeichen oder umschließen Sie die Zeichenkette mit gegenteiligen Anführungszeichen. Zum Beispiel:

MsgBox "Sie sagte: `"Ein Apfel pro Tag.`""
MsgBox 'Sie sagte: "Ein Apfel pro Tag."'

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.

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/>/=/< erzeugen automatisch einen True- oder False-Wert: 1 für True und 0 für False. Die Operatoren AND/OR hingegen erzeugen immer einen der Eingabewerte. Im folgenden Beispiel wird 1 in die Done-Variable gespeichert, wenn A_Index größer als 5 ist, andernfalls der Wert von FoundIt:

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.

In einem Ausdruck werden die Schlüsselwörter True und False in 1 bzw. 0 aufgelöst. 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 oder mit der wissenschaftlichen Schreibweise angegeben sind, 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. Floating-Point-Zahlen können optional mit der wissenschaftlichen Schreibweise angegeben werden, mit oder ohne Dezimalpunkt (z.B. 1e4 oder -2.1E-4).

Innerhalb von Ausdrücken werden direkt geschriebene Zahlen ohne Anführungszeichen wie 128, 0x7F und 1.0 bereits vor Beginn der Skriptausführung in reine Zahlen umgewandelt. Folglich kann die Umwandlung der Zahl in eine Zeichenkette einen Wert erzeugen, der vom direkt geschriebenen Originalwert abweicht. Zum Beispiel:

MsgBox(0x7F)  ; Zeigt 128
MsgBox(1.00)  ; Zeigt 1.0

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 wird ein TypeError ausgelöst. Wenn Try nicht verwendet wird, führt die unbehandelte Ausnahme standardmäßig zu einem Fehlerdialogfenster.

Ausdrucksoperatoren (absteigende Priorität)

Operator Beschreibung
%Ausdr%

Dereferenzierung oder Namensubstitution.

Wenn die Auswertung von Ausdr eine VarRef ergibt, greift %Ausdr% auf die entsprechende Variable zu. Zum Beispiel nimmt x := &y eine Referenz, die auf y verweist, und weist sie x zu, dann weist %x% := 1 der Variable y etwas zu und %x% liest ihren Wert.

Andernfalls wird der Wert des Teilausdrucks Ausdr als Name oder Teilname einer Variable oder Eigenschaft verwendet. Auf diese Weise kann das Skript auf eine Variable oder Eigenschaft verweisen, deren Name durch die Auswertung von Ausdr ermittelt wird, was typischerweise eine andere Variable ist. Variablen können nicht dynamisch erstellt werden, aber eine Variable kann dynamisch zugewiesen werden, wenn sie irgendwo im Skript nicht-dynamisch deklariert oder referenziert wurde.

Hinweis: Das Ergebnis des Teilausdrucks Ausdr muss der Name oder Teilname der Variable oder Eigenschaft sein, auf die zugegriffen werden soll.

Prozentzeichen dürfen wegen ihrer Mehrdeutigkeit nicht direkt in Ausdr verwendet werden, können aber innerhalb von runden Klammern verschachtelt werden. Andernfalls kann Ausdr ein beliebiger Ausdruck sein.

Eventuell angrenzende %Ausdr%-Sequenzen und teilweise vorhandene Namen (ohne Leerzeichen oder andere Zeichen dazwischen) werden zu einem einzigen Namen kombiniert.

Standardmäßig wird ein Error ausgelöst, wenn die Variable noch nicht existiert oder wenn sie uninitialisiert ist und ihr Wert gelesen wird. Um diesen Fall zu vermeiden, kann mit dem Oder-Vielleicht-Operator (??) ein Standardwert bereitgestellt werden. Zum Beispiel: %'keineVar'% ?? 42.

Obwohl historisch als "double-deref" (Doppeldereferenz) bekannt, ist dieser Begriff ungenau, wenn Ausdr keine Variable enthält (erste Dereferenzierung), und wenn die resultierende Variable, die das Ziel einer Zuweisung ist, nicht dereferenziert wird (zweite Dereferenzierung).

x.y
x.%z%
Objektelementzugriff. Abrufen (Get), Setzen (Set) oder Aufrufen (Call) einer Methode des Objekts x, wobei y ein direkt geschriebener Name und z ein Ausdruck ist, dessen Auswertung einen Namen ergibt. Siehe Objektsyntax.
Var?

Vielleicht. Erlaubt einer Variable, ungesetzt zu sein. Dies kann nur für die Übergabe einer Variable an einen optionalen Parameter, an ein Array-Element oder an ein direkt geschriebenes Objekt verwendet werden; oder auf der rechten Seite einer direkten Zuweisung. Nach dem Fragezeichen muss eines der folgenden Symbole stehen (Leerzeichen werden ignoriert): )]},:. Die Variable kann bedingt mit dem ternären Operator oder auf der rechten Seite von AND/OR übergeben werden.

Die Variable ist typischerweise ein optionaler Parameter, kann aber eine beliebige Variable sein. Für Variablen, die keine Funktionsparameter sind, kann beim Laden des Skripts immer noch eine VarUnset-Warnung angezeigt werden, wenn andere Referenzen zu der Variable existieren, aber keine Zuweisungen.

Dieser Operator wird derzeit nur für Variablen unterstützt. Um in allgemeineren Fällen einen Parameter explizit oder bedingt wegzulassen, verwenden Sie das Schlüsselwort unset.

Siehe auch: unset (Optionale Parameter)

++
--

Vorherige und nachherige Inkrementierung/Dekrementierung. Erhöht oder verringert eine Variable um 1. Der Operator kann entweder vor oder hinter dem Namen der Variable stehen. Wenn der Operator vor dem Namen steht, wird die Operation ausgeführt und das Ergebnis wird von der nächsten Operation verwendet (das Ergebnis ist in diesem Fall eine Variablenreferenz). Zum Beispiel bewirkt Var := ++X, dass X um 1 erhöht und der Wert in Var gespeichert wird. Wenn der Operator hingegen hinter dem Namen einer Variable steht, ist das Ergebnis der Wert von X vor der Ausführung der Operation. Zum Beispiel bewirkt Var := X++, dass X um 1 erhöht wird, aber Var erhält den Wert, den X vor der Inkrementierung hatte.

Diese Operatoren können auch mit einer Eigenschaft eines Objekts verwendet werden, z.B. meinArray.Length++ oder --meinArray[i]. In diesen Fällen ist das Ergebnis des Teilausdrucks immer eine Zahl, keine Variablenreferenz.

**

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.

Der Potenzoperator ist rechtsassoziativ. Zum Beispiel wird x ** y ** z als x ** (y ** z) ausgewertet.

Hinweis: Eine negative Basis mit einem gebrochenen Exponenten wie (-2)**0.5 wird nicht unterstützt und führt dazu, dass eine Ausnahme ausgelöst wird. Allerdings werden sowohl (-2)**2 als auch (-2)**2.0 unterstützt. Wenn Basis und Exponent 0 sind, ist das Ergebnis undefiniert und führt dazu, dass eine Ausnahme ausgelöst wird.

-
!
~
&

Unäres Minuszeichen (-): Invertiert das Vorzeichen des Operanden.

Unäres Pluszeichen (+): +N ist dasselbe wie -(-N). Dieser Operator hat keinen Effekt, wenn er auf eine reine Zahl angewendet wird, ist aber nützlich, um numerische Zeichenketten in reine Zahlen umzuwandeln.

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. 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. Da vorzeichenfähige 64-Bit-Integer verwendet werden, führt ein positiver Eingabewert immer zu einem negativen Ergebnis und umgekehrt. Zum Beispiel ergibt die Auswertung von ~0xf0f -0xf10 (-3856), was binär äquivalent zu 0xfffffffffffff0f0 ist. Wenn ein vorzeichenloser 32-Bit-Wert beabsichtigt ist, kann das Ergebnis mit Ergebnis & 0xffffffff gekürzt werden. Wenn der Operand eine Floating-Point-Zahl ist, wird ein TypeError ausgelöst.

Referenz (&): Erstellt eine VarRef. Dies ist ein Wert, der eine Referenz repräsentiert, die auf eine Variable verweist. Eine VarRef kann verwendet werden, um indirekt auf die Zielvariable zuzugreifen. Zum Beispiel bewirkt Ref := &Ziel gefolgt von %Ref% := 1, dass 1 in Ziel gespeichert wird. Die VarRef wird normalerweise an eine Funktion übergeben, kann aber auch in ein Array oder eine Eigenschaft gespeichert werden. Siehe auch: Dereferenz, ByRef.

Das Abrufen einer Referenz, die auf eine interne Variable wie z.B. A_Clipboard verweist, wird derzeit nicht unterstützt, es sei denn, sie wird direkt an einen AusgabeVar-Parameter einer internen Funktion übergeben.

*
/
//

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

Andere Verwendungen: Das Sternchensymbol (*) kann auch in variadischen Funktionsaufrufen verwendet werden.

Echte Division (/): Die echte Division liefert 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.

Integer-Division (//): Der Doppelschrägstrich-Operator verwendet eine hochperformante Integer-Division. Zum Beispiel ergibt 5//3 1 und 5//-3 -1. Wenn einer der Eingabewerte im Floating-Point-Format ist, wird ein TypeError ausgelöst. 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 bewirkt, dass ein ZeroDivisionError ausgelöst wird.

+
-

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.

Andere Verwendungen: Wenn dem Plus- oder Minuszeichen kein Wert (oder Teilausdruck, der einen Wert zurückgibt) vorangestellt ist, wird es stattdessen als unärer Operator interpretiert.

<<
>>
>>>

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 (>>>). 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.

Das Folgende gilt für alle drei Operatoren:

  • Wenn einer der Eingabewerte eine Floating-Point-Zahl ist, wird ein TypeError ausgelöst.
  • Es wird eine 64-Bit-Operation durchgeführt und das Ergebnis ist ein vorzeichenfähiger 64-Bit-Integer.
  • Wenn Wert2 kleiner als 0 oder größer als 63 ist, wird eine Ausnahme ausgelöst.
&
^
|

Bitweises UND (&), bitweises exklusives ODER (^) und bitweises ODER (|). Von diesen drei Operatoren hat & die höchste Priorität und | die niedrigste Priorität.

Das Folgende gilt für alle drei Operatoren:

  • Wenn einer der Eingabewerte eine Floating-Point-Zahl ist, wird ein TypeError ausgelöst.
  • Es wird eine 64-Bit-Operation durchgeführt und das Ergebnis ist ein vorzeichenfähiger 64-Bit-Integer.

Siehe auch: Bitweises NICHT (~)

.

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.

Es wird immer die volle Länge jedes Eingabewertes verwendet, auch dann, wenn binäre Nullen enthalten sind. Zum Beispiel erzeugt Chr(0x2010) Chr(0x0000) Chr(0x4030) die folgende Zeichenkette von Bytes (wegen der UTF-16-LE-Kodierung): 0x10, 0x20, 0, 0, 0x30, 0x40. Das Ergebnis hat einen zusätzlichen Nullterminator (binäre Null), der nicht zur Länge hinzugezählt wird.

Andere Verwendungen: Wenn kein Leer- oder Tabulatorzeichen rechts vom Punkt steht, wird dies entweder als direkt geschriebene Floating-Point-Zahl oder als Objektelementzugriff interpretiert. Zum Beispiel ist 1.1 oder (.5) eine Zahl, A_Args.Has(3) ein Methodenaufruf und A_Args.Length ein Eigenschaftszugriff.

~= Kurzschreibweise für RegExMatch. Zum Beispiel bewirkt "abc123" ~= "\d", dass 4 (die Position des ersten numerischen Zeichens) zurückgegeben wird.
>   <
>= <=

Größer (>), kleiner (<), größer gleich (>=) und kleiner gleich (<=). Die Eingabewerte werden numerisch verglichen. Es wird ein TypeError ausgelöst, wenn einer der Eingabewerte weder eine Zahl noch eine numerische Zeichenkette ist.

=
==
!=
!==

nicht-Groß-/Kleinschreibung-sensitiv gleich (=) / ungleich (!=) und Groß-/Kleinschreibung-sensitiv gleich (==) / ungleich (!==). Die Operatoren == und = verhalten sich gleich, wenn beide Eingabewerte numerisch sind, es sei denn, einer der Eingabewerte ist nicht numerisch (oder beide sind Zeichenketten), dann ist == immer Groß-/Kleinschreibung-sensitiv und = immer nicht-Groß-/Kleinschreibung-sensitiv. Die Operatoren != und !== verhalten sich wie ihre Gegenstücke ohne !, außer dass das Ergebnis invertiert ist.

Mit den Operatoren == und !== können Zeichenketten verglichen werden, die binäre Nullen enthalten. Alle anderen Vergleichsoperatoren außer ~= vergleichen Zeichenketten nur bis zur ersten binären Null.

Bei nicht-Groß-/Kleinschreibung-sensitiven Vergleichen werden nur die ASCII-Großbuchstaben A bis Z und die entsprechenden Kleinbuchstaben als identisch betrachtet. Um stattdessen gemäß den Regeln der aktuellen Sprach- und Regionseinstellungen des Benutzers zu vergleichen, verwenden Sie StrCompare und geben Sie "Locale" im GroßKleinSensitiv-Parameter an.

IS
IN
CONTAINS

Wert is Klasse ist 1 (true), wenn Wert eine Instanz von Klasse ist, andernfalls 0 (false). Klasse muss ein Object mit einer eigenen Prototype-Eigenschaft sein, aber in der Regel ist die Eigenschaft implizit durch eine Klassendefinition definiert. Diese Operation ist grundsätzlich äquivalent zu HasBase(Wert, Klasse.Prototype).

in und contains sind für zukünftige Zwecke reserviert.

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.

In einem Ausdruck, wo alle Operanden wahr sind, wird der letzte Operand zurückgegeben. Andernfalls wird der erste Operand, der falsch ist, zurückgegeben. Mit anderen Worten, das Ergebnis ist nur wahr, wenn alle Operanden wahr sind. Boolesche Ausdrücke werden einer Kurzschlussauswertung unterzogen (von links nach rechts), um die Performanz zu verbessern.

Im folgenden Beispiel sind alle Operanden wahr und werden ausgewertet:

A := 1, B := {}, C := 20, D := true, E := "Zkette"
MsgBox(A && B && C && D && E) ; Zeigt "Zkette" (E).

Im folgenden Beispiel werden nur die ersten beiden Operanden ausgewertet, da B falsch ist. Der Rest wird ignoriert, d.h. auch C wird nicht inkrementiert:

A := 1, B := "", C := 0, D := false, E := "Zkette"
MsgBox(A && B && ++C && D && E) ; Zeigt "" (B).

Eine Zeile, die mit AND oder && (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.

In einem Ausdruck, wo mindestens ein Operand wahr ist, wird der erste Operand, der wahr ist, zurückgegeben. Andernfalls wird der letzte Operand, der falsch ist, zurückgegeben. Mit anderen Worten, wenn mindestens ein Operand wahr ist, ist auch das Ergebnis wahr. Boolesche Ausdrücke werden einer Kurzschlussauswertung unterzogen (von links nach rechts), um die Performanz zu verbessern.

Im folgenden Beispiel ist mindestens ein Operand wahr. Alle Operanden bis zu D werden ausgewertet. E wird ignoriert und nie inkrementiert:

A := "", B := false, C := 0, D := "Zkette", E := 20
MsgBox(A || B || C || D || ++E) ; Zeigt "Zkette" (D).

Im folgenden Beispiel sind alle Operanden falsch und werden ausgewertet:

A := "", B := false, C := 0
MsgBox(A || B || C) ; Zeigt "0" (C).

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

??

Oder-Vielleicht, auch Koaleszenzoperator genannt. Wenn der linke Operand (der eine Variable sein muss) einen Wert hat, wird dieser als Ergebnis verwendet und der rechte Zweig übersprungen. Andernfalls wird der rechte Operand als Ergebnis verwendet. Mit anderen Worten, A ?? B verhält sich wie A || B (logisches OR), außer dass die Bedingung IsSet(A) ist.

Dieser Operator wird typischerweise verwendet, um einen Standardwert anzugeben, wenn bekannt ist, dass eine Variable oder ein optionaler Parameter noch keinen Wert haben wird. Zum Beispiel:

MsgBox MeineVar ?? "Standardwert"

Da die Variable in diesem Fall uninitialisiert sein kann, wird kein Fehler ausgelöst. Im Gegensatz zu IsSet(A) ? A : B kann beim Laden des Skripts immer noch eine VarUnset-Warnung angezeigt werden, wenn andere Referenzen zu der Variable existieren, aber keine Zuweisungen.

?:

Ternärer Operator. 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).

Siehe auch: Vielleicht (Var?), Oder-Vielleicht (??)

Hinweis: Wenn dieser Operator am Anfang einer Zeile verwendet wird, ist es ratsam, die ternäre Bedingung in runde Klammern zu setzen, um Mehrdeutigkeiten mit anderen Anweisungsarten zu vermeiden. Einzelheiten finden Sie unter Ausdrucksanweisungen.

:=
+=
-=
*=
/=
//=
.=
|=
&=
^=
>>=
<<=
>>>=

Zuweisung. Führt eine Operation am Inhalt einer Variable durch und speichert das Ergebnis wieder in dieselbe Variable. 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 Integer-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. Eine Zuweisung kann auch mit dem Referenzoperator kombiniert werden, wie in &(Var := "Startwert").

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.

Um die Zielvariable ungesetzt zu machen, kombinieren Sie eine direkte Zuweisung (:=) mit dem Schlüsselwort unset oder dem Operator Vielleicht (var?). Zum Beispiel: Var := unset, Var1 := (Var2?).

Eine Zuweisung kann auch mit einer Eigenschaft eines Objekts verwendet werden, z.B. meinArray.Length += n oder meinArray[i] .= t. Bei einer Eigenschaft ist der Zuweisungswert das Ergebnis des Teilausdrucks, keine Variablenreferenz.

() => Ausdr

Fat-Arrow-Funktion. Definiert eine einfache Funktion und gibt ein Func- oder Closure-Objekt zurück. Schreiben Sie die Parameterliste der Funktion (optional mit vorangestelltem Funktionsnamen) links neben den Operator. Wenn die Funktion aufgerufen wird (über die zurückgegebene Referenz), wertet sie den Teilausdruck Ausdr aus und gibt das Ergebnis zurück.

Die folgenden zwei Beispiele sind äquivalent:

sumfn := Sum(a, b) => a + b
Sum(a, b) {
    return a + b
}
sumfn := Sum

In beiden Fällen wird die Funktion zum Zeitpunkt des Skriptstarts bedingungslos definiert, aber die Funktionsreferenz wird erst nach Auswertung der Zuweisung in sumfn gespeichert.

Wenn der Funktionsname weggelassen wird und die Parameterliste nur aus einem einzigen Parameternamen besteht, können die runden Klammern weggelassen werden. Das folgende Beispiel definiert eine anonyme Funktion mit dem Parameter a und speichert ihre Referenz in die Variable double:

double := a => a * 2

Variablenreferenzen in Ausdr werden auf die gleiche Weise aufgelöst wie in der äquivalenten vollständigen Funktionsdefinition. Zum Beispiel kann Ausdr auf die lokalen Variablen einer äußeren Funktion verweisen (wie in jeder verschachtelten Funktion), woraufhin ein neues Closure erzeugt wird, das jedes Mal seinen Wert zurückgibt, wenn der Fat-Arrow-Ausdruck ausgewertet wird. Die Funktion ist immer eine Assume-Local-Funktion, da Deklarationen nicht verwendet werden können.

Gibt man der Funktion einen Namen, kann sie rekursiv oder von anderen verschachtelten Funktionen aufgerufen werden, ohne dass in der Funktion selbst eine Referenz zum Closure gespeichert werden muss (und dadurch ein problematischer Zirkelbezug entsteht). Dies kann auch fürs Debuggen hilfreich sein, z.B. mit Func.Name oder zum Anzeigen auf dem Aufrufstapel des Debuggers.

Die Fat-Arrow-Syntax kann auch zum Definieren von Shorthand-Eigenschaften und -Methoden verwendet werden.

,

Komma (Mehrfachanweisung). 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.

Das Komma wird auch verwendet, um die Parameter eines Funktionsaufrufs oder einer Kontrollanweisung voneinander zu trennen. Um einen Mehrfachanweisungsausdruck in eine Parameterliste einzufügen, umschließen Sie ihn mit einem zusätzlichen Paar runder Klammern. Zum Beispiel wertet MeineFn((x, y)) sowohl x als auch y aus, übergibt aber y als den ersten und einzigen Parameter von MeineFn.

Im Gegensatz zu v1 sind kommagetrennte Ausdrücke in der Regel weniger performant als einzeln geschriebene Ausdrücke. Je mehr Ausdrücke zu einem einzigen Ausdruck zusammengefasst werden, desto schlechter ist die Performanz. Zum Beispiel kann die Geschwindigkeit um 35 % abnehmen, wenn fünf oder zehn einfache Ausdrücke zu einem einzigen Ausdruck kombiniert werden. Eine Ausnahme hiervon besteht möglicherweise bei der Kombination von Funktionsaufrufen.

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 letzten Anweisung zurückgegeben. Zum Beispiel bewirkt (a := 1, b := 2, c := 3), dass 3 zurückgegeben wird.

Mod()
Round()
Abs()

Funktionsaufruf. Zwischen dem Funktionsnamen/Ausdruck und der runden Startklammer, die die Parameterliste beginnt, dürfen keine Leerzeichen stehen. Einzelheiten finden Sie unter Funktionsaufrufe.

(Ausdruck) muss nicht in Klammern gesetzt werden, aber dadurch können Mehrdeutigkeiten vermieden werden. Zum Beispiel liest (x.y)() eine Funktion aus einer Eigenschaft und ruft sie dann ohne Parameter auf, während x.y() implizit x als ersten Parameter übergeben würde.

(Ausdruck)()

Fn(Params*)

Variadischer Funktionsaufruf. Params ist ein enumerierbares Objekt (ein Objekt mit einer __Enum-Methode), z.B. ein Array von Parameterwerten.

x[y]
[a, b, c]

Objektelementzugriff. Ermittelt oder setzt die __Item-Eigenschaft (oder Standardeigenschaft) des Objekts x mit dem Parameter y (oder mehreren Parametern anstelle von y). Dies entspricht typischerweise einem Array-Element oder einem Element in einer Collection, wobei y der Index oder Schlüssel des Elements ist. Um dem Element einen Wert zuzuweisen, verwenden Sie einen Zuweisungsoperator direkt nach der eckigen Endklammer. Zum Beispiel x[y] := z.

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 zur allgemeinen Verwendung finden Sie unter Arrays und Maps.

{a: b, c: d}

Direkt geschriebenes Objekt. Erstellt ein Object. Jedes Paar besteht aus einem direkt geschriebenen Eigenschaftsnamen a und einem Eigenschaftswertausdruck b. Zum Beispiel ist x := {a: b} äquivalent zu x := Object(), x.a := b. Base kann innerhalb des direkt geschriebenen Objekts gesetzt werden, aber alle anderen Eigenschaften werden als eigene Werteigenschaften gesetzt, mit der Möglichkeit (oder Gefahr), die vom Basisobjekt geerbten Eigenschaften zu überschreiben.

Um einen dynamischen Eigenschaftsnamen zu verwenden, umschließen Sie den Teilausdruck mit Prozentzeichen. Zum Beispiel: {%NameVar%: WertVar}.

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 Enthält ein einzelnes Leerzeichen.
A_Tab Enthält ein einzelnes Tabulatorzeichen.

Skripteigenschaften

Variable Beschreibung
A_Args Enthält ein Array von Befehlszeilenparametern. Einzelheiten finden Sie unter Befehlszeilenparameter an ein Skript übergeben.
A_WorkingDir

Kann verwendet werden, um das aktuelle Arbeitsverzeichnis des Skripts abzurufen oder zu setzen, 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.

SetWorkingDir kann auch verwendet werden, um das Arbeitsverzeichnis zu ändern.

Das Arbeitsverzeichnis des Skripts ist standardmäßig immer A_ScriptDir, egal wie das Skript gestartet wurde.

A_InitialWorkingDir 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).

Wenn der Skripttext nicht aus der Datei, sondern aus der Standardeingabe (stdin) gelesen wird, enthält diese Variable das anfängliche Arbeitsverzeichnis.

A_ScriptName

Kann verwendet werden, um den Standardtitel für MsgBox, InputBox, FileSelect, DirSelect und Gui abzurufen oder zu setzen. Wenn nicht vom Skript gesetzt, enthält diese Variable den Dateinamen des aktuellen Skripts, ohne Pfad, z.B. MeinSkript.ahk.

Wenn der Skripttext nicht aus der Datei, sondern aus der Standardeingabe (stdin) gelesen wird, enthält diese Variable ein Sternchen (*).

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 der Skripttext nicht aus der Datei, sondern aus der Standardeingabe (stdin) gelesen wird, enthält diese Variable ein Sternchen (*).

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

A_ScriptHwnd 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.

Wenn das Skript eingebettet ist, enthält A_LineFile ein Sternchen (*), gefolgt vom Namen der Ressource; z.B. *#1

A_ThisFunc Der Name der benutzerdefinierten Funktion, die gerade ausgeführt wird (andernfalls leer), z.B. MeineFunktion. Siehe auch: Name-Eigenschaft (Func)
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:

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

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_IsCompiled Enthält 1, wenn das Skript als kompilierte EXE-Datei ausgeführt wird, andernfalls 0 (das als falsch angesehen wird).

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() (Uhrzeit und langes Datum) oder FormatTime(, "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(, "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, -2). 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(, "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 DateAdd und DateDiff 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 Enthält 1, wenn der Thread direkt unterhalb des aktuellen Threads pausiert ist, andernfalls 0.
A_IsCritical 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. Um den aktuellen Status von Critical zu speichern und wiederherzustellen, verwenden Sie Alt_IsCritical := A_IsCritical und später Critical Alt_IsCritical.
A_ListLines Kann verwendet werden, um abzurufen oder festzulegen, ob Zeilen protokolliert werden sollen. Mögliche Werte sind 0 (deaktiviert) und 1 (aktiviert). Einzelheiten finden Sie unter ListLines.
A_TitleMatchMode Kann verwendet werden, um den Modus der Titelübereinstimmung abzurufen oder zu setzen. Mögliche Werte sind 1, 2, 3 und RegEx. Einzelheiten finden Sie unter SetTitleMatchMode.
A_TitleMatchModeSpeed Kann verwendet werden, um die Geschwindigkeit der Titelübereinstimmung abzurufen oder zu setzen. Mögliche Werte sind Fast und Slow. Einzelheiten finden Sie unter SetTitleMatchMode.
A_DetectHiddenWindows Kann verwendet werden, um abzurufen oder festzulegen, ob versteckte Fenster erkannt werden sollen. Mögliche Werte sind 0 (deaktiviert) und 1 (aktiviert). Einzelheiten finden Sie unter DetectHiddenWindows.
A_DetectHiddenText Kann verwendet werden, um abzurufen oder festzulegen, ob versteckte Texte in einem Fenster erkannt werden sollen. Mögliche Werte sind 0 (deaktiviert) und 1 (aktiviert). Einzelheiten finden Sie unter DetectHiddenText.
A_FileEncoding Kann verwendet werden, um die Standardkodierung für verschiedene interne Funktionen abzurufen oder zu setzen. Einzelheiten finden Sie unter FileEncoding.
A_SendMode Kann verwendet werden, um den Send-Modus abzurufen oder zu setzen. Mögliche Werte sind Event, Input, Play und InputThenPlay. Einzelheiten finden Sie unter SendMode.
A_SendLevel Kann verwendet werden, um den Sendlevel, ein Integer von 0 bis 100, abzurufen oder zu setzen. Einzelheiten finden Sie unter SendLevel.
A_StoreCapsLockMode Kann verwendet werden, um abzurufen oder festzulegen, ob der Zustand von Feststell nach einem Send wiederhergestellt werden soll. Mögliche Werte sind 0 (deaktiviert) und 1 (aktiviert). Einzelheiten finden Sie unter SetStoreCapsLockMode.
A_KeyDelay
A_KeyDuration
Kann verwendet werden, um die Verzögerung oder Dauer (in Millisekunden) für Tastendrücke abzurufen oder zu setzen. Einzelheiten finden Sie unter SetKeyDelay.
A_KeyDelayPlay
A_KeyDurationPlay
Kann verwendet werden, um die Verzögerung oder Dauer (in Millisekunden) für Tastendrücke, die über den SendPlay-Modus gesendet werden, abzurufen oder zu setzen. Einzelheiten finden Sie unter SetKeyDelay.
A_WinDelay Kann verwendet werden, um die Verzögerung (in Millisekunden) für fensterspezifische Funktionen abzurufen oder zu setzen. Einzelheiten finden Sie unter SetWinDelay.
A_ControlDelay Kann verwendet werden, um die Verzögerung (in Millisekunden) für steuerelement­modifizierende Funktionen abzurufen oder zu setzen. Einzelheiten finden Sie unter SetControlDelay.
A_MouseDelay
A_MouseDelayPlay
Kann verwendet werden, um die Verzögerung (in Millisekunden) für Mausaktionen abzurufen oder zu setzen. A_MouseDelay gilt für den traditionellen SendEvent-Modus, A_MouseDelayPlay für den SendPlay-Modus. Einzelheiten finden Sie unter SetMouseDelay.
A_DefaultMouseSpeed Kann verwendet werden, um die Standardgeschwindigkeit des Mauszeigers, ein Integer von 0 (schnell) bis 100 (langsam), abzurufen oder zu setzen. Einzelheiten finden Sie unter SetDefaultMouseSpeed.
A_CoordModeToolTip
A_CoordModePixel
A_CoordModeMouse
A_CoordModeCaret
A_CoordModeMenu
Kann verwendet werden, um den Bereich, zu dem Koordinaten relativ sein sollen, abzurufen oder zu setzen. Mögliche Werte sind Screen, Window und Client. Einzelheiten finden Sie unter CoordMode.
A_RegView Kann verwendet werden, um die Registry-Ansicht abzurufen oder zu setzen. Mögliche Werte sind 32, 64 und Default. Einzelheiten finden Sie unter SetRegView.
A_TrayMenu

Gibt ein Menu-Objekt zurück, mit dem das Tray-Menü geändert oder angezeigt werden kann.

A_AllowMainWindow

Kann verwendet werden, um abzurufen oder festzulegen, ob das Hauptfenster des Skripts über das Tray-Symbol geöffnet werden darf. Mögliche Werte sind 0 (verboten) und 1 (erlaubt).

Wenn das Skript weder kompiliert noch eingebettet ist, wird diese Variable standardmäßig auf 1 gesetzt, andernfalls wird diese Variable standardmäßig auf 0 gesetzt, kann aber durch Zuweisung eines Wertes überschrieben werden. Diese Variable auf 1 zu setzen, stellt auch den Menüpunkt "Open" im Tray-Menü wieder her und aktiviert die Menüpunkte im View-Menü des versteckten Hauptfensters des Skripts, wie z.B. "Lines most recently executed", was den Quellcode des Skripts und andere Informationen anzeigt.

Die folgenden Funktionen sind immer in der Lage, das Hauptfenster zu öffnen und die entsprechenden View-Optionen auszuwählen, wenn sie während der Skriptausführung erreicht werden: ListLines, ListVars, ListHotkeys und KeyHistory.

Die Variable auf 1 zu setzen, verhindert nicht, dass das Hauptfenster mit WinShow sichtbar gemacht oder mit ControlGetText oder ähnlichem inspiziert werden kann, verhindert aber, dass der Quellcode des Skripts und andere Informationen via Hauptfenster preisgegeben werden, außer wenn eine der oben aufgeführten Funktionen vom Skript aufgerufen wird.

A_IconHidden Kann verwendet werden, um abzurufen oder festzulegen, ob das Tray-Symbol versteckt werden soll. Mögliche Werte sind 0 (sichtbar) und 1 (versteckt). Einzelheiten finden Sie unter #NoTrayIcon.
A_IconTip

Kann verwendet werden, um den Tooltiptext des Tray-Symbols abzurufen oder zu setzen; dieser wird angezeigt, wenn sich der Mauszeiger darüber befindet. Wenn leer, wird stattdessen der Name des Skripts verwendet.

Um einen Tooltip mehrzeilig zu machen, trennen Sie jede Zeile mit einem LF-Zeichen (`n), z.B. "Zeile1`nZeile2". Es werden nur die ersten 127 Zeichen angezeigt. Außerdem wird der Text am ersten Tabulatorzeichen abgeschnitten, falls vorhanden.

Windows 10 und niedriger: Um ein Und-Zeichen (&) im Tooltip anzuzeigen, versehen Sie es mit zwei zusätzlichen Und-Zeichen. Zum Beispiel bewirkt "A &&& B", dass "A & B" im Tooltip angezeigt wird.

A_IconFile Leer, es sei denn, ein benutzerdefiniertes Tray-Symbol wurde via TraySetIcon 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-Funktion) 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 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 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.

Hotkeys, Hotstrings und benutzerdefinierte Menüpunkte

Variable Beschreibung
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, deshalb ist es in der Regel besser, den Parameter ThisHotkey nach Möglichkeit zu verwenden.

Jeder neu erstellte Hotkey - entweder via Hotkey-Funktion oder Zweifach-Doppelpunkt-Syntax - 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.

A_PriorHotkey Dasselbe wie oben, aber für den vorherigen Hotkey. Andernfalls leer.
A_PriorKey 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 leer, wenn A_ThisHotkey leer ist.
A_TimeSincePriorHotkey Die Zeit in Millisekunden, die seit dem Drücken von A_PriorHotkey verstrichen ist. Dieser Wert ist leer, 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.
A_MaxHotkeysPerInterval Kann verwendet werden, um die maximale Anzahl von Hotkeys abzurufen oder zu setzen, die innerhalb eines via A_HotkeyInterval definierten Zeitrahmens gedrückt werden können, ohne ein Warndialogfenster auszulösen. Einzelheiten finden Sie unter A_MaxHotkeysPerInterval.
A_HotkeyInterval Kann verwendet werden, um die Länge des von A_MaxHotkeysPerInterval verwendeten Intervalls abzurufen oder zu setzen, in Millisekunden.
A_HotkeyModifierTimeout Kann verwendet werden, um das Zeitlimit abzurufen oder zu setzen, das Einfluss auf das Verhalten von Send mit den Hotkey-Modifikatoren Strg, Alt, Win und Umschalt hat. Einzelheiten finden Sie unter A_HotkeyModifierTimeout.

Betriebssystem und Benutzerinformationen

Variable Beschreibung
A_ComSpec

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

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_OSVersion

Die Versionsnummer des Betriebssystems im Format "Haupt.Neben.Build". Windows 7 SP1 ist beispielsweise 6.1.7601.

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.

A_Is64bitOS Enthält 1 (true), wenn das System 64-Bit ist, oder 0 (false), wenn es 32-Bit ist.
A_PtrSize 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

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)".
A_AppData

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

C:\Users\<Benutzer>\AppData\Roaming
A_AppDataCommon

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:

VirtuelleBreite := SysGet(78)
VirtuelleHöhe := SysGet(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 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 -DPIScale-GUI-Option.

Sonstiges

Variable Beschreibung
A_Clipboard Kann verwendet werden, um den Inhalt der systeminternen Zwischenablage abzurufen oder zu setzen. Einzelheiten finden Sie unter A_Clipboard.
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_EventInfo

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

Hinweis: Jeder Thread hat seinen eigenen Wert für A_EventInfo (im Gegensatz zu 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.

A_EventInfo kann auch vom Skript gesetzt werden, akzeptiert aber nur vorzeichenlose Integer innerhalb eines Zahlenbereichs, der für Pointer üblich ist (je nach AutoHotkey-Version entweder 32-Bit oder 64-Bit).

A_LastError

Diese Variable ist üblicherweise das Ergebnis der Systemfunktion GetLastError(), nachdem das Skript bestimmte Funktionen wie z.B. DllCall, Run/RunWait und File/Ini/Reg-Funktionen (wo dokumentiert) aufgerufen hat. A_LastError ist eine Zahl zwischen 0 und 4294967295 (immer dezimal, nicht hexadezimal). Null (0) bedeutet Erfolg, während jede andere Zahl bedeutet, dass der Aufruf fehlgeschlagen ist. Jede Nummer entspricht einem bestimmten Fehlerzustand. Unter OSError erfahren Sie, wie der lokalisierte Fehlerbeschreibungstext abgerufen werden kann, oder suchen Sie auf www.microsoft.com nach "system error codes", um eine Liste zu erhalten. A_LastError ist eine threadspezifische Einstellung, d.h. es kann nicht durch Unterbrechungen anderer Threads geändert werden.

Beim Zuweisen eines Wertes an A_LastError wird auch die Systemfunktion SetLastError() aufgerufen.

True
False

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

Dies sind Schlüsselwörter, keine Variablen.

Loop

Variable Beschreibung
A_Index Kann verwendet werden, um die Nummer der aktuellen Schleifenwiederholung (ein 64-Bit-Integer) abzurufen oder zu setzen. 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. Bei endlichen Schleifen wie z.B. Loop beeinflusst eine Änderung von A_Index die aktuelle Anzahl der geplanten Wiederholungen.
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