Variablentypen: AutoHotkey kennt keine unterschiedlichen Variablentypen. Alle Variablen werden als Zeichenfolgen gespeichert. Wenn eine Variable aber nur Ziffern und optional einen Dezimalpunkt enthält, wird ihr Inhalt automatisch in eine Zahl umgewandelt, wenn es für mathematische Berechnungen oder numerische Vergleiche notwendig ist. Dem entsprechend wird das Ergebnis einer mathematischen Berechnung auch wieder als Zeichenfolge gespeichert.
Geltungsbereich und Deklaration von Variablen: Mit Ausnahme der lokalen Variablen n Funktionen sind alle Variablen global, d.h. ihr Inhalt kann an jeder Stelle des Skripts gelesen oder verändert werden. Variablen werden nicht durch spezielle Anweisungen deklariert. Bei der ersten Verwendung ihres Namens im Skript werden sie automatisch als leerer Speicherbereich angelegt.
Variablennamen: Variablennamen wird nicht zwischen Groß- und Kleinschreibung unterschieden, AktuellesDATUM und aktuellesdatum bezeichnen deshalb dieselbe Variable. Variablennamen können bis zu 254 Zeichen lang sein und dürfen Buchstaben, Ziffern und folgende Sonderzeichen enthalten: # _ @ $ ? [ ]
Wegen der in anderen Programmiersprachen geltenden Konventionen sollten auch in AutoHotkey für Variablennamen nur Buchstaben, Ziffern und der Unterstrich (_) verwendet werden (z.B.: CursorPosition, Total_Items und entry_is_valid). Programmierer, die andere Programmiersprachen kennen, können dann AHK-Skripte leichter verstehen. Und wenn man selbst auch in anderen Sprachen programmiert, macht es das eigene Leben leichter.
Obwohl Variablennamen auch ausschließlich aus Ziffern bestehen dürfen, werden solche Namen grundsätzlich nur für übergebene Kommandozeilenparameter verwendet. Namen aus Ziffern können auch nicht in Ausdrücken verwendet werden, weil sie dort als Zahlen und nicht als Variablennamen behandelt werden.
Die Worte AND, OR und NOT sind Operatoren in Ausdrücken, sie sollten deshalb grundsätzlich nicht als Variablennamen verwendet werden. Die Verwendung dieser Namen in Ausdrücken würde zu falschen Ergebnissen führen.
Speichern von Werten in Variablen: Es gibt zwei Methoden, eine Zeichenfolge oder eine Zahl in einer Variablen zu speichern: traditionell oder als Ausdruck (engl. expression). Die traditionelle Methode verwendet das Gleichheitszeichen "=", um nicht in Anführungszeichen eingeschlossene Zeichenfolgen oder den Inhalt von Variablen über ihren in Prozentzeichen eingeschlossenen Namen zu speichern, z.B.:
MeineZahl = 123
MeineZeichenfolge = Das ist eine Zeichenfolge.
KopieEinerVariablen = %Var% ; Bei der Zuweisung mit "=" muss der Variablenname in Prozentzeichen (%) eingeschlossen werden.
In Ausdrücken wird dagegen der Zuweisungsoperator ":=" verwendet, um Zahlen, in Anführungszeichen eingeschlossene Zeichenfolgen oder andere Ausdrücke abzuspeichern. Die folgenden Beispiele sind funktional identisch mit den vorherigen Beispielen:
MeineZahl := 123
MeineZeichenfolge := "Das ist eine Zeichenfolge."
KopieEinerVariablen := Var ; Bei der Zuweisung mit := wird der Variablennamen ohne Prozentzeichen verwendet.
Ausdrücke beschreiben die gewünschte Aktion klarer und die AHK Syntax für Ausdrücke entspricht der von vielen anderen Sprachen.
Wie man sich nach dem Vorangegangenen denken kann, gibt es auch zwei Methoden, um den Inhalt einer Variablen zu löschen (d.h. um sie zu leeren):
MeineVariable =
MeineVariable := ""
Das "leere" Paar Anführungszeichen darf nur mit dem ":=" Operator verwendet werden. Bei "=" werden die Anführungszeichen selbst in der Variablen abgelegt.
Auslesen des Inhalts von Variablen: Wie die zwei Methoden beim Speichern, so gibt es auch für das Auslesen von Variablen zwei Methoden: traditionell und als Ausdruck. Bei der traditionellen Methode muss der Name der Variablen in Prozentzeichen (%) eingeschlossen werden, damit auf den Inhalt zugegriffen wird:
Kopie = %Var%
MsgBox Der Inhalt der Variablen Var ist %Var%.
In Ausdrücken werden die einschließenden Prozentzeichen bei Namen nicht benötigt, Zeichenfolgen müssen aber in Anführungszeichen eingeschlossen werden. Die nachfolgend verwendeten Ausdrücke entsprechen deshalb den vorherigen Beispielen:
Kopie := Var
MsgBox % "Der Inhalt der Variablen Var ist " . Var . "."
In der o.a. MsgBox Zeile wird ein Prozentzeichen mit nachfolgendem Leerzeichen verwendet, um den Parameter in einen Ausdruck zu verwandeln. Das ist notwendig, weil alle Kommandos (die Ausnahmen sind beschrieben) als Vorgabe traditionelle Parameter erwarten. Einige Parameter einiger Kommandos können jedoch gemäß Beschreibung auch als Ausdruck übergeben werden. In diesen Fällen ist das vorangestellte Prozentzeichen zur Kennzeichnung erlaubt, muss aber nicht verwendet werden. Z.B. sind alle folgenden Schreibweisen korrekt, weil der erste Parameter des Sleep Kommandos ein Ausdruck sein darf:
Sleep ZeitInMillisekunden
Sleep %ZeitInMillisekunden%
Sleep % ZeitInMillisekunden
Variablen vergleichen: Die unterschiedlichen Arten des Vergleichs von Variablen werden ausführlich im folgenden Abschnitt Ausdrücke beschrieben, insbesondere die Verwendung von Klammern.
Mit Ausdrücken (engl. expressions) können in einer Anweisung eine oder mehrere Aktionen für mehrere Variablen, Zeichenfolgen und/oder Zahlen ausgeführt werden.
Variablennamen in Ausdrücken werden nicht in Prozentzeichen eingeschlossen (mit Ausnahme von Arrays und anderer Doppelreferenzen). Als Konsequenz daraus müssen Zeichenfolgen in Anführungszeichen eingeschlossen werden, damit sie eindeutig von Variablennamen unterschieden werden können:
if (CurrentSetting > 100 or FoundColor <> "Blue")
MsgBox Die Einstellung ist zu hoch oder die Farbe ist nicht Blau.
Im o.a. Beispiel muss "Blue" in Anführungszeichen eingeschlossen werden, weil es eine Zeichenfolge ist. Wenn ein Anführungszeichen innerhalb einer Zeichenfolge vorkommt, muss es verdoppelt werden, wie es zweimal im folgenden Beispiel gezeigt wird: "Sie sagte, ""Ein Apfel am Tag."""
Wichtig: Ein If Kommando, das einen Ausdruck enthält, unterscheidet sich von einem traditionellen If Kommando wie If FoundColor <> Blue dadurch, dass hinter dem Wort "If" eine öffnende Klammer "(" folgt. Obwohl üblicherweise der gesamte Ausdruck in Klammern eingeschlossen wird, ist auch die Schreibweise If (x > 0) and (y > 0) zulässig. Außerdem kann die öffnende Klammer ganz entfallen, wenn direkt auf das If ein Funktionsaufruf oder ein Operator wie "not" oder "!" folgt.
Leere Zeichenfolgen: In einem Ausdruck wird eine leere Zeichenfolge durch zwei aufeinanderfolgende Anführungszeichen dargestellt. Die Anweisung if (MeineVar <> "") ist z.B. wahr, wenn MeineVar nicht leer ist. In einem traditionellen If werden Anführungszeichen dagegen als normale Zeichen behandelt. Die Anweisung if MeineVar = "" ist z.B. nur wahr, wenn MeineVar genau zwei aufeinanderfolgende Anführungszeichen enthält. Für die Prüfung, ob eine Variable leer ist, muss deshalb in traditionellen If Kommandos die Schreibweise = oder <> ohne nachfolgende Wertangabe verwendet werden: if Var =
Ergänzend ist anzumerken, dass jeder ungültige Ausdruck wie (x +* 3) eine leere Zeichenfolge ergibt.
Speichern des Ergebnisses eines Ausdrucks: Einer Variablen wird das Ergebnis mit dem Zuweisungsoperator := zugewiesen:
NettoPreis := Preis * (1 - Discount/100)
Das o.a. Beispiel ergibt wegen der Division eine Gleitkommazahl. Die Anzahl der Nachkommastellen in NettoPreis wird mit SetFormat festgelegt. SetFormat kann auch weitere Eigenschaften des Ergebnisses eines Ausdrucks verändern. Im Gegensatz dazu hat AutoTrim keine Wirkung auf Ausdrücke.
Boolesche Werte: Wenn ein Ausdruck wie in If Kommandos nur auf "wahr" oder "falsch" geprüft wird, werden die leere Zeichenfolge und die Null (0) als "falsch" und alle anderen Werte als "wahr" behandelt. Die Anweisung "if Zaehler" liefert z.B. nur dann "falsch", wenn Zaehler leer oder gleich 0 ist. Der Ausdruck "if not Zaehler" liefert dann das gegenteilige Ergebnis "wahr".
Operatoren wie NOT/AND/OR/>/=/< ergeben automatisch "wahr" oder "falsch": sie liefern 1 für "wahr" und 0 für "falsch". Im folgenden Ausdruck erhält z.B. die Variable Done den Wert 1, wenn eine der Bedingungen wahr ist:
Done := A_Index > 5 or FoundIt
Wie oben bereits erwähnt, entspricht der Wert falsch einer leeren Zeichenfolge oder 0. Zur Prüfung, ob die Variable Done falsch oder wahr ist, kann deshalb auch die Kurzform "if Done" verwendet werden.
Die Worte true und false sind AHK-interne Variablen mit dem Inhalt 1 bzw. 0. Ihre Verwendung macht ein Skript leichter lesbar:
CaseSensitive := false
ContinueSearch := true
Ganzzahlen und Gleitkommazahlen: In einem Ausdruck werden Zahlen als Gleitkommazahlen behandelt, wenn sie einen Dezimalpunkt enthalten, sonst als Ganzzahlen. Die meisten Operatoren -- wie Addition (+) und Multiplikation (*) -- liefern als Ergebnis eine Gleitkommazahl, wenn auch nur einer der Operanden eine Gleikommazahl ist.
Ganzzahlen können generell im Hexadezimal- oder Dezimalformat geschrieben werden. Hexadezimale Zahlen beginnen mit den Zeichen 0x. Sleep 0xFF ist z.B. gleichbedeutend mit Sleep 255. In v1.0.46.11+, Fließkommazahlen in wissenschaftlicher Schreibweise werden erkannt; allerdings nur, wenn sie einen Dezimalpunkt enthalten (z.B.: 1.0e4 and -2.1E-4).
Einen Ausdruck erzwingen: Ein Ausdruck kann auch in einem Parameter verwendet werden, der Ausdrücke nicht direkt unterstützt (außer in OutputVar oder InputVar Parametern wie in StringLen), indem der Ausdruck mit einem Prozentzeichen gefolgt von einem Leerzeichen oder einem Tabulatorsprung eingeleitet wird. Diese Technik wird oft benötigt, um auf Arrays zugreifen zu können:
FileAppend, % MeinArray%i%, MeineDatei.txt
MsgBox % "Die Variable MyVar enthält " MyVar "."
Loop % Anzahl + 1
WinSet, Transparent, % X + 100
Control, Choose, % CurrentSelection - 1
Operatoren gleicher Rangfolge wie multipliziere (*) und teile (/) werden von links nach rechts ausgewertet, wenn es unten nicht anders beschrieben wird. Dagegen werden Operatoren niedrigerer Rangfolge wie addiere (+) erst nach höherwertigen wie multipliziere (*) verarbeitet (Punkt vor Strich). Z.B. wird 3 + 2 * 2 als 3 + (2 * 2) ausgeführt. Diese Reihenfolge kann durch gezielte Verwendung von Klammern verändert werden: (3 + 2) * 2
| %Var% |
Wenn eine Variable innerhalb eines Ausdrucks in Prozentzeichen eingeschlossen wird (z.B. %Var%), wird ihr Inhalt immer als Name oder Namensteil einer anderen Variablen behandelt (wenn keine solche Variable existiert, liefert %Var% eine leere Zeichenfolge). Das wird üblicherweise für den Zugriff auf Elemente eines Arrays verwendet: Var := MeinArray%A_Index% + 100 Die Auflösung einer derartigen Referenz darf nicht auf Umgebungsvariable, die Zwischenablage oder eine interne/schreibgeschütze Variable verweisen. Falls doch, wird sie wie eine leere Zeichenfolge behandelt. |
| ++ -- |
Vorherige oder nachträgliche Erhöhung/Verringerung (Increment/Decrement). Addiert oder subtrahiert 1 (in Versionen vor 1.0.46 können diese Operatoren nur als einzige in einer Zeile verwendet werden; kein anderer Operator darf auftreten). Der Operator darf entweder vor oder nach dem Variablennamen stehen. Wenn er davor steht, wird die Operation sofort ausgeführt und das Ergebnis für nachfolgende Operationen verwendet. Var := ++X z.B. erhöht X sofort und weist den neuen Wert dann Var zu. Wenn der Operator nach nach dem Namen steht, wird die Operation dagegen erst ausgeführt, nachdem der Wert an nachfolgende Operationen übergeben wurde. Var := X++ erhöht X erst nach Zuweisung des aktuellen Werts an die Variable Var. |
| ** | Potenz. Sowohl die Basis als auch der Exponent dürfen einen Dezimalpunkt enthalten. Bei negativen Exponenten ist das Ergebnis eine Gleitpunktzahl, auch wenn Basis und Exponent beide Ganzzahlen sind. Weil ** in der Rangfolge höher steht als das unäre Minus, wird -2**2 als -(2**2) gerechnet und ergibt somit -4. Um eine negative Zahl zu potenzieren, muss sie deshalb in Klammern eingeschlossen werden, z.B. (-2)**2. Achtung: Eine negative Basis in Kombination mit einem Exponentenwert kleiner 1 wie z.B. (-2)**0.5 ist nicht zulässig - als Ergebnis wird eine leere Zeichenfolge geliefert - aber sowohl (-2)**2 als auch (-2)**2.0 sind zulässige Operationen. |
| - ! ~ & * |
Unäres Minus (-): Obwohl es dasselbe Zeichen verwendet wie der Subtraktionsoperator, ist das unäre Minus nur einem einzelnen Objekt oder Teilausdruck zugeordnet wie nachfolgend zweimal gezeigt wird: -(3 / -x). Anmerkung: Unäre Pluszeichen (+) werden in Ausdrücken immer ignoriert Logisch nicht (!): Wenn der Operand leer oder gleich 0 ist, ist das Ergebnis eines logischen nicht 1, d.h. "true (wahr)". In allen anderen Fällen ist das Ergebnis 0 (false (falsch)), z.B.: !x or !(y and z). Achtung: Der Operator NOT ist wirkungsgleich mit !, ! ist aber höherwertig in der Rangfolge. In Version v1.0.46+ sind auch aufeinanderfolgende unäre Operatoren wie !!Var erlaubt, weil sie von links nach rechts abgearbeitet werden. Bitweises nicht (~): Invertiert alle Bits des Operanden von 0 auf 1 bzw. umgekehrt. Wenn der Operand eine Gleitkommazahl ist, wird er vor der Operation auf seinen ganzzahligen Wert gekürzt. Wenn der Wert des Operanden zwischen 0 und 4294967295 (0xffffffff) liegt, wird er als 32-bittiger Wert ohne Vorzeichen, anderenfalls als 64-bittiger Wert mit Vorzeichen behandelt. ~0xf0f ergibt z.B. 0xfffff0f0 (4294963440). Adresse (&) and Dereferenz (*): &MeineVar liefert die Speicheradresse des Inhalts von MeineVar. Dagegen geht *Ausdruck davon aus, dass Ausdruck auf eine numerische Speicheradresse verweist und liefert den Inhalt des ersten Bytes des Speicherbereichs mit dieser Adresse als Zahl zwischen 0 and 255 (wenn die Adresse 0 ist, wird immer 0 geliefert, alle anderen ungültigen Adressen müssen aber vermieden werden, weil sie zum Absturz des Skripts führen können; außerdem ist NumGet() generell viel schneller im Auslesen der Zahlen). Diese selten benutzten Operatoren werden hauptsächlich für DllCall Strukturen und die Bearbeitung von Zeichenfolgen gebraucht, die binäre Nullen (0x00) enthalten. ExtractInteger() ist ein Beispiel dafür. |
| * / // |
Multiplikation (*): Das Ergebnis ist eine Ganzzahl, wenn beide Operanden Ganzzahlen sind, sonst eine Gleitkommazahl. Echte Division (/): Anders als EnvDiv liefert die echte Division auch dann eine Gleitkommazahl, wenn beide Operanden Ganzzahlen sind. 3/2 ergibt z.B. 1.5 anstatt 1 und 4/2 ergibt 2.0 anstatt 2. Ganzzahlige Division (//): Die abrundende Division nutzt die hochperformante Ganzzahldivision, wenn beide Operanden Ganzzahlen sind. 5//3 ergibt z.B. 1 und 5//-3 ergibt -1. Wenn einer der Operanden eine Gleitkommazahl ist, wird eine Gleitkommadivision durchgeführt und als Ergebnis der ganzzahlige Anteil geliefert. Obwohl das Ergebnis eine ganzzahliger Wert ist, wird es dennoch im Gleitkommaformat gespeichert, damit das ursprüngliche Format für spätere Operationen erhalten bleibt. 5//3.0 ergibt z.B. 1.0 und 5.0//-3 ergibt -2.0. Für "Modulo" siehe mod(). Die *= und /= Operatoren sind Kurzformen der Multiplikation oder Division von Variablen, Var*=2 hat dasselbe Ergebnis wie Var:=Var*2 (und ist außerdem schneller). Eine Division durch 0 liefert als Ergebnis eine leere Zeichenfolge. |
| + - |
Addition (+) und Subtraktion (-). Achtung: In Ausdrücken werden leere Operanden in mathematischen Operationen nicht als 0 behandelt. Stattdessen gilt es als Fehler und der betroffene Teil des Ausdrucks liefert als Ergebnis eine leere Zeichenfolge. Ist z.B. die Variable X leer, liefert der Ausdruck X+1 ebenfalls ein leeres Ergebnis und nicht 1. Die Operatoren += und -= sind Kurzformen für die Addition oder Subtraktion von Variablen, Var+=2 liefert dasselbe Ergebnis wie Var:=Var+2 (und ist außerdem schneller). Für die Addition bzw. Subtraktion von 1 können auch Var++, Var--, ++Var oder --Var verwendet werden. |
| << >> |
Bitweises schieben nach links (<<) und rechts (>>). Beispiel: Wert1 << Wert2. Gleitkommazahlen werden vor der Operation auf ihren ganzzahligen Anteil verkürzt. Das Schieben nach links (<<) entspricht einer Multiplikation von Wert1 mit "2 potenziert mit (hoch) Wert2". Das Schieben nach rechts (>>) entspricht deiner Division von Wert1 durch "2 potenziert mit Wert2" mit Abrunden auf die nächste Ganzzahl (z.B. -3>>1 ist -2). |
| & ^ | |
Bitweises "und" (&),
bitweises "exklusives (ausschließendes)
oder" (^) und bitweises "oder" (|).
Von diesen drei Operatoren hat &
die höchste und | die niedrigste
Rangfolge. Gleitkommazahlen werden vor der Operation auf ihren
ganzzahligen Anteil verkürzt. Das bitweise Und setzt im Ergebnis alle Bits, die in beiden Operanden gesetzt sind (d.h. den Wert 1 haben), das exclusive bitweise Oder setzt alle Bits, die nur in einem der beiden Operanden gesetzt sind, und das bitweise Oder alle Bits, die in einem oder beiden Operanden gesetzt sind. |
| . |
Verbinden.
Der Punkt (.) Operator verbindet zwei Elemente zu einer
Zeichenfolge. Auf beiden Seiten des Punktes muss mindestens
ein Leerzeichen
stehen. Man kann den Punkt auch weglassen, wenn die zu verbindenden
Elemente durch mindestens ein Leerzeichen getrennt sind, nicht
mehrdeutig sind (wie z.B. x -y)
und dem rechten Element kein ++ oder -- vorangestellt ist. Auch Teilausdrücke können verbunden werden, z.B.: Var := "Der Nettopreis ist " . Price * (1 - Discount/100) Beachte: Eine Zeile, die mit einem Punkt (oder einem anderen Operator) beginnt, wird automatisch an die Vorzeile angehängt. |
| > < >= <= |
Größer (>), kleiner (<), größer oder gleich (>=) und kleiner oder gleich (<=). Wenn nicht beide Operanden Zahlen sind, erfolgt der Vergleich alphabetisch. Eine in Anführungszeichen eingeschlossene Zahl wie "55" wird dabei als Zeichenfolge behandelt. Der Vergleich berücksichtigt die Groß/Kleinschreibung nur dann, wenn vorher StringCaseSense auf "On" gesetzt wurde. Siehe auch: Sort |
| = == <> != |
Gleich (=) , gleich (Groß/Kleinschreibung) (==) und ungleich (<> oder !=). Die Operatoren != und <> haben identische Funktionen. Der == Operator verhält sich wie =, wenn beide Operanden Zahlen sind. Bei Zeichenfolgen berücksichtigt == immer die Groß/Kleinschreibung, = dagegen nicht, wenn nicht StringCaseSense On gesetzt wurde; das gilt auch für <> und !=. Achtung: Eine in Anführungszeichen eingeschlossene Zahl wie "55" wird dabei immer als Zeichenfolge behandelt. |
| NOT | Logisch nicht. Abgesehen von der niedrigeren Rangfolge ist NOT identisch mit dem ! Operator, not (x = 3 or y = 3) und !(x = 3 or y = 3) sind z.B. identisch. |
| AND && |
Beide bedeuten logisch und. Beispiel: x > 3 and x < 10. Für eine performantere Ausführung wird eine Kurzauswertung vorgenommen. Eine Zeile, die mit AND/OR/&&/|| (oder einem anderen Operator) beginnt, wird automatisch an die Vorzeile angehängt. |
| OR || |
Beide bedeuten logisch oder. Beispiel: x <= 3 or x >= 10. Für eine performantere Ausführung wird eine Kurzauswertung vorgenommen. |
| ?: |
Ternärer (dreifacher) Operator [v1.0.46+]. Dieser Operator ist eine Kurzform der If-Else Anweisung. Die Bedingung auf der linken Seite des Fragezeichens wird ausgewertet, das Ergebnis bestimmt, welche der beiden durch den Doppelpunkt getrennten Alternativen auf der rechten Seite des Fragezeichens als Ergebnis zugewiesen wird ("wahr" = Alternative 1, "falsch" = Alternative 2). Z.B. speichert var := x>y ? 2 : 3 2 in Var, wenn x größer als y ist, anderenfalls wird 3 gespeichert. Für eine performantere Ausführung wird nur der Ausdruck der zutreffenden Alternative ausgewertet (siehe Kurzauswertung). Achtung: Aus Kompatibilitätsgründen muss das Fragezeichen in Leerzeichen eingeschlossen sein, damit es erkannt wird. Möglicherweise wird sich das in künftigen Versionen ändern. |
| := += -= *= /= //= .= |= &= ^= >>= <<= |
Zuweisung. Die Zuweisung führt eine Operation mit dem Inhalt einer Variablen aus und speichert das Ergebnis in derselben Variablen ab. Vor Version 1.0.46 konnten nur die ersten 5 Operatoren als erster Operator einer Zeile verwendet werden. Die einfachste Zuweisung ist :=, die das Ergebnis eines Ausdrucks in einer Variablen speichert. Die anderen Zuweisungen werden in den zugehörigen Einträgen in dieser Tabelle beschreiben. Var //= 2 z.B. teilt Var durch 2 mit einer abrundenden Division und speichert das Ergebnis in Var. Var .= "abc" ist eine abkürzende Schreibweise für Var := Var . "abc". Im Gegensatz zu den meisten anderen Operatoren werden Zuweisungen von rechts nach links ausgewertet. Demzufolge wird in der Anweisung Var1 := Var2 := 0 zuerst Var2 der Wert 0 und erst danach Var1 der Wert von Var2 zugewiesen. Wenn eine Zuweisung als Eingabe einer anderen Operation verwendet wird, wird der Wert der Variablen übergeben. Der Ausdruck (Var+=2) > 50 ist z.B. wahr, wenn Var nach der Addition von 2 größer als 50 ist. Damit kann eine Zuweisung auch als ByRef Parameter oder mit dem Addressen Operator verwendet werden (z.B.: &(x:="abc"). Die Rangfolge einer Zuweisung wird automatisch erhöht, wenn dadurch Syntaxfehler vermieden oder ein mehr den intuitiven Erwartungen entsprechendes Verhalten erreicht werden kann. So werden z.b. not x:=y als not (x:=y), ++Var := X als ++(Var := X) und Z>0 ? X:=2 : Y:=2 als Z>0 ? (X:=2) : (Y:=2) ausgewertet. Bekannte Einschränkungen (sie werden möglicherweise in künftigen Versionen beseitigt): 1) Aus Gründen der Abwärtskompatibilität wird /= als ganzzahlige Division ausgeführt, wenn es der erste Operator eines Ausdrucks und nicht Teil eines Ausdrucks mit Mehrfachanweisungen ist und keiner der Operanden eine Gleitkommazahl ist. In allen anderen Fällen führt /= eine echte Division) aus. 2) In Datum/Zeit Berechnungen können += und -= nur als erster Operator einer Zeile verwendet werden. 3) Die Operatoren +=, -=, und *= behandeln leere Werte nur dann als 0, wenn sie nicht Teil eines Ausdrucks mit Mehrfachanweisungen sind, anderenfalls ist das Ergebnis ebenfalls leer. |
| , |
Komma (Mehrfachanweisungen) [v1.0.46+]. Kommas können verwendet werden, um mehrere Anweisungen in eine Zeile zu schreiben. Das wird meist dafür genutzt, mehrere Zuweisungen und Funktionsaufrufe zu gruppieren, z.B.: x:=1, y+=2, ++index, func() [man beachte aber den Abschnitt Komma und Performanz]. Die Anweisungen werden von links nach rechts ausgeführt. Eine Zeile, die mit einem Komma (oder einem anderen Operator) beginnt, wird automatisch an die davorstehende Zeile angehängt. Ab Version v1.0.46.01+ wird, wenn einem Komma direkt eine Variable und ein Gleichheitszeichen folgen, automatisch eine := Zuweisung ausgeführt, z.B. x:=1, y=2, a=b=c werden wie X:=1, y:=2, a:=b:=c behandelt. |
|
mod() |
Diese und die anderen internen mathematischen Funktionen werden hier beschrieben. |
Ausführungsgeschwindigkeit: Die
Ausführung des Zuweisungsoperators
:= wurde optimiert, sodass er in einfachen Fällen
ebensoschnell ausgeführt wird wie die traditionalle Zuweisung
mit =:
x := y ; Gleiche Performanz wie x = %y%
x := 5 ; Gleiche Performanz wie x = 5.
x := "Meine Zeichengolge" ; Gleiche Performanz wie x = Meine Zeichenfolge
Der Komma-Operator (,) bewirkt, das einfache Zuweisungen wie normale Ausdrücke verarbeitet und nicht optimiert werden. Die folgenden Anweisungen werden z.B. zumindest um 20% schneller ausgeführt, wenn sie in einzelnen Zeilen stehen (der Unterschied wird möglicherweise in kommenden Versionen verringert): Var++, Var-=Var2, Var:=55, Var:="literal string", Var:=Var2. Andererseits erhöht sich durch den Komma-Operator die Ausführungsgeschwindigkeit (wenn auch normalerweise um weniger als 5%), wenn komplizierte Ausdrücke wie z.B. Funktionsaufrufe beteiligt sind, weil die Ausdrücke dann gemeinsam in einer Aktion und nicht einzeln ausgewertet werden.
Die folgenden Variablen werden von AutoHotkey automatisch zur Verfügung gestellt und können in jedem Skript genutzt werden. Mit Ausnahme von Clipboard , ErrorLevel, und Kommandozeilenparametern können diese Variablen nur ausgelesen und nicht direkt durch Wertzuweisung verändert werden.
| A_Space | Die Variable enthält ein einzelnes Leerzeichen (siehe auch AutoTrim). |
| A_Tab | Die Variable enthält ein Tabulatorzeichen (siehe auch AutoTrim). |
| 0, 1, 2, 3, etc. | Diese Variablen werden automatisch erzeugt, wenn dem Skript Kommandozeilenparameter übergeben werden. Sie können wie normale Variablen referenziert und auch verändert werden (z.B.: %1%). Die Referenz %0% liefert die Anzahl der übergebenen Parameter bzw. 0, wenn keine übergeben wurden. Eine detaillierte Beschreibung findet sich in Kommandozeilenparameter. |
| A_WorkingDir | Das aktuelle Arbeitsverzeichnis des Skripts. Dort werden alle Dateien ohne Pfadangabe erwartet. Das abschließende \ ist nicht enthalten, wenn es nicht das Wurzelverzeichnis ist. Zwei Beispiele: C:\ und C:\My Documents. Mit SetWorkingDir kann das Arbeitsverzeichnis geändert werden. |
| A_ScriptDir | Der vollständige Pfad des Verzeichnisses, in dem das Skript gespeichert ist. Wegen der Abwärtskompatibilität zu AutoIt v2 ist das abschließende \ nur in .aut Skripten enthalten (sogar für das Wurzelverzeichnis). Ein Beispiel für ein .aut Skript ist C:\My Documents\ |
| A_ScriptName | Der Dateiname des Skripts ohne Pfad, z.B. MeinSKript.ahk. |
| A_ScriptFullPath | Die Kombination der beiden voranstehenden Variablen, sie liefert den vollständigen Dateipfad des Skripts, z.B. C:\Eigene Dateien\Mein Skript.ahk |
| A_LineNumber |
Die Nummer der aktuell ausgeführten Zeile des Skripts oder einer seiner #Include Dateien. Diese Zeilennummer entspricht der mit ListLines angezeigten und kann z.B. für die Fehlerbehandlung verwendet werden: MsgBox Fehler beim Schreiben der Logdatei (Zeile Nummer %A_LineNumber%). Weil ein kompiliertes Skript die Zeilen der #Include Dateien einmischt, können die Zeilennummern dort andere sein als im Originalskript. |
| A_LineFile | Der vollständige Pfad der Datei, die die Zeile A_LineNumber enthält. Wenn die Zeile nicht zu einer #Include Datei in einem unkompilierten Skript gehört, ist der Inhalt der Variablen identisch mit A_ScriptFullPath. |
| A_ThisFunc [v1.0.46.16+] |
Der Name der Benutzerdefinierten Funktion, die aktuell ausgeführt wird (leer falls keine ausgeführt wird); Zum Beispiel: MeineFunktion |
| A_ThisLabel [v1.0.46.16+] |
Der Name des Labels (Unterfunktion), die aktuell ausgeführt wird (leer falls keine ausgeführt wird); Zum Beispiel: MyLabel. Es wird immer aktualisiert, wenn das Script Gosub/Return oder Goto ausführt. Es wird auch automatisch aktualisiert bei Timer, GUI Threads, Menü-Einträge, Tastenkürzel, Hotstrings, OnClipboardChange, and OnExit. A_ThisLabel wird nicht aktualisiert, wenn es während der Ausführung "durch" ein Label "fällt". In diesem Fall behält A_ThisLabel seinen vorherigen Wert. Siehe auch: A_ThisHotkey |
| A_AhkVersion | In Versionen vor 1.0.22 ist diese Variable leer. Seitdem enthält sie die Version der AutoHotkey.exe, die das Skript gestartet hat, z.B. 1.0.22. Bei kompilierten Skripten enthält sie die Version, mit der das Skript kompiliert wurde. Das Format der Versionsnummer ermöglicht eine einfache Prüfung mit > or >=, ob A_AhkVersion größer als eine minimal erforderliche Version ist: if A_AhkVersion >= 1.0.25.07 |
| A_AhkPath [v1.0.41+] |
Für
nicht kompilierte Skripte: Für kompilierte
Skripte: |
| A_IsCompiled | Enthält 1, wenn das Skript als kompilierte EXE gestartet wurde, anderenfalls ist die Variable leer. |
| A_ExitReason | Der zeitlich letzte Grund für die Beendigung des Skripts. Die Variable ist nur gefüllt, wenn das Skript eine OnExit Subroutine enthält und diese gerade abläuft oder zumindest einmal bei einem vorangegangenen Beendigungsversuch durchlaufen wurde. Eine detaillierte Beschreibung findet sich in OnExit. |
| A_YYYY (A_Year) |
Die aktuelle vierstellige Jahreszahl (z.B. 2004). Achtung: Für eine den nationalen oder sprachlichen Einstellungen entsprechende Datums- oder Zeitangabe verwendet man "FormatTime, OutputVar" (Zeit und Datum im Langformat) oder "FormatTime, OutputVar,, LongDate" (nur Datum im Langformat). |
| A_MM (A_Mon) |
Die aktuelle zweistellige Monatszahl (01-12) |
| A_DD (A_MDay) |
Die aktuelle zweistellige Tageszahl (01-31) |
| A_MMMM | Der Name des aktuellen Monats in der eingestellten Sprache, z.B. Juli |
| A_MMM | Der abgekürzte Name des aktuellen Monats in der eingestellten Sprache, z.B. Jul |
| A_DDDD | Der Name des aktuellen Tages in der eingestellten Sprache, z.B. Sonntag |
| A_DDD | Der abgekürzte Name des aktuellen Tages in der eingestellten Sprache, z.B. So |
| A_WDay | Die einstellige Zahl des Wochentags (1-7), Sonntag ist für alle Spracheinstellungen 1 |
| A_YDay | Der aktuelle Tag des laufenden Jahres (1-366). Der Wert wird nicht durch führende Nullen aufgefüllt, z.B. wird 9 und nicht 009 geliefert. Um führende Nullen zu erhalten, muss man FormatTime, OutputVar, , YDay0 verwenden. |
| A_YWeek | Aktuelles Jahr und aktuelle Wochennummer (z.B. 200453) gemäß ISO 8601. Um Jahr und Wochennummer zu trennen, verwendet man StringLeft, Jahr, A_YWeek, 4 und StringRight, Woche, A_YWeek, 2. Genaue Definition von A_YWeek: Wenn die Woche des 1. Januars mindestens 4 Tage im neuen Jahr enthält, ist sie die Woche 1 des neuen Jahres, sonst die letzte Woche des alten Jahres. |
| A_Hour | Die aktuelle zweistellige Stundenzahl (00-23) im 24-Stunden Format (z.B. 17 (5pm)). Eine Zahl im 12-Stunden Format und die AM/PM Zusätze werden z.B. mit FormatTime, OutputVar, , h:mm:ss tt geliefert. |
| A_Min | |
| A_Sec | Die aktuelle zweistellige Sekundenzahl (00-59). |
| A_MSec | Die aktuelle dreistellige Millisekundenzahl. Die führenden Nullen können z.B. mit Millisekunden := A_MSec + 0 entfernt werden. |
| A_Now | Die aktuelle lokale Zeit im YYYYMMDDHH24MISS Format. Achtung: Datums- und Zeitberechnungen können mit EnvAdd und EnvSub durchgeführt werden. Mit FormatTime können Datum und/oderZeit den lokalen Einstellungen oder speziellen Anforderungen entsprechend formatiert werden. |
| A_NowUTC | Die aktuelle Coordinated Universal Time (UTC) im YYYYMMDDHH24MISS Format. UTC entspricht weitestgehend der Greenwich Mean Time (GMT). |
| A_TickCount |
Die Anzahl der Millisekunden seit dem letzten Start des Computers. Wenn man A_TickCount in einer Variablen speichert, kann später die verstrichene Zeit durch Subtraktion der Variablen vom aktuellen Wert von A_TickCount berechnet werden: StartZeit := A_TickCount Wenn man eine höhere Genauigkeit als die 10 ms von A_TickCount benötigt, sollte man QueryPerformanceCounter() verwenden. |
| A_IsSuspended | Aktueller Suspend Status: 1 = an, 0 = aus. |
| A_BatchLines (A_NumBatchLines) |
Der aktuelle Wert gemäß SetBatchLines, z.B. 200 oder 10ms (abhängig vom Format). |
| A_TitleMatchMode | Der aktuelle Modus gemäß SetTitleMatchMode: 1, 2, 3 oder RegEx. |
| A_TitleMatchModeSpeed | Die aktuelle Suchgeschwindigkeit gemäß SetTitleMatchMode: Fast (schnell) oder Slow (langsam).. |
| A_DetectHiddenWindows | Der aktuelle Modus gemäß DetectHiddenWindows: On (an) oder Off (aus). |
| A_DetectHiddenText | Der aktuelle Modus gemäß DetectHiddenText: On (an) oder Off (aus). |
| A_AutoTrim | Der aktuelle Modus gemäß AutoTrim: On (an) oder Off (aus). |
| A_StringCaseSense | Der aktuelle Modus gemäß StringCaseSense: On (an) oder Off (aus). |
| A_FormatInteger | Das aktuelle Format für Ganzzahlen gemäß SetFormat: D (dezimal) oder H (hexadezimal). |
| A_FormatFloat | Das aktuelle Format für Gleitkommazahlen gemäß SetFormat. |
| A_KeyDelay | Die aktuelle Verzögerung gemäß SetKeyDelay (immer dezimal, nicht hex). Diese Verzögerung gilt für den traditionellen SendEvent Modus, nicht für SendPlay. |
| A_WinDelay | Die aktuelle Verzögerung gemäß SetWinDelay (immer dezimal, nicht hex). |
| A_ControlDelay | Die aktuelle Verzögerung gemäß SetControlDelay (immer dezimal, nicht hex). |
| A_MouseDelay | Die aktuelle Verzögerung gemäß SetMouseDelay (immer dezimal, nicht hex). Diese Verzögerung gilt für den traditionellen SendEvent Modus, nicht für SendPlay. |
| A_DefaultMouseSpeed | Die aktuelle Mausgeschwindigkeit gemäß SetDefaultMouseSpeed (immer dezimal, nicht hex). |
| A_IconHidden | Enthält 1, wenn das Trayicon z.Zt. verborgen ist, sonst 0. Das Icon kann mit #NoTrayIcon oderr dem Menu Kommando verborgen werden. |
| A_IconTip | Enthält den Text des mit Menu, Tray, Tip -- für das Trayicon definierten Tooltips, sonst ist die Variable leer. |
| A_IconFile | Enthält den vollständigen Pfad des mit Menu, tray, icon -- definierten Icons, sonst ist die Variable leer. |
| A_IconNumber | Ist leer, wenn A_IconFile leer ist. Anderenfalls enthält die Variable die Nummer des Icons in A_IconFile (normalerweise 1). |
| A_TimeIdle | Die Anzahl
der verstrichenen Millisekunden seit der letzten Tastatur-, Maus-
oder sonstigen Eingabe. Man kann damit feststellen, ob der
Benutzer noch am Computer arbeitet. Die Variable ist in
Betriebssystemversionen
vor Windows 2000 leer. Jede echte Eingabe durch den Benutzer
und auch künstlich generierte Eingaben jedes
Programms
oder Skripts (wie z.B. mit Send
oder MouseMove
Kommandos) setzt die Variable auf Null zurück. Die Variable
wird jeweils um 10 erhöht. Bei einer Prüfung sollte
deshalb nicht auf gleich (=), sondern auf größer
(>) oder kleiner (<) abgefragt werden, z.B.:IfGreater, A_TimeIdle, 600000 |
| A_TimeIdlePhysical |
Ähnlich wie A_TimeIdle, ignoriert aber künstliche Tastatur- und/oder Mausereignisse, wenn der zugehörige Hook (Tastatur oder Maus) installiert ist. Wenn kein Hook installiert ist, ist der Inhalt identisch mit A_TimeIdle. Wenn nur ein Hook installiert ist, werden nur die entsprechenden künstlichen Eingaben ignoriert. A_TimeIdlePhysical erlaubt zuverlässiger als A_TimeIdle die Feststellung, ob der Benutzer wirklich anwesend ist. |
| A_Gui | Die Nummer des Fensters der GUI, das den aktuellen Thread aufgerufen hat. Die Variable ist leer, wenn der Thread nicht durch ein Fensterelement, einen Menüeintrag oder ein Ereignis wie GuiClose/GuiEscape aufgerufen wurde. |
| A_GuiControl | Der Name der Variablen, die dem GUI Element zugewiesen wurde, das den aktuellen Thread aufgerufen hat. Wenn das Element keine zugewiesene Variable hat, enthält A_GuiControl die ersten 63 Zeichen der Aufschrift bzw. des Textes des Elements (man muss deshalb nicht jedem Button eine Variable zuweisen). A_GuiControl ist immer dann leer, wenn: 1) A_Gui leer ist; 2) der aktuelle Thread über einen GUI Menüeintrag oder ein Ereignis wie GuiClose/GuiEscape aufgerufen wurde; 3) das auslösende Element weder eine zugewiesene Variable noch eine Aufschrift hat; oder 4) das Element, das den Thread ursprünglich aufgerufen hat, nicht mehr existiert (z.B. nach Gui Destroy). |
| A_GuiWidth A_GuiHeight |
Diese Variablen beinhalten in einer GuiSize Subroutine die Höhe und Breite des GUI Fensters. Sie beziehen sich auch den Fensterinhalt und berücksichtigen weder den Titelleiste noch eine Menüleiste und/oder den Fensterrand. |
| A_GuiX A_GuiY |
Diese Variablen beinhalten die X und Y Koordinaten bei GuiContextMenu und GuiDropFiles Ereignissen. Die Koordinaten sind relativ zur oberen linken Ecke des Fensters. |
| A_GuiEvent or A_GuiControlEvent |
Die Art des Ereignisses, das den aktuellen Thread aufgerufen hat. Wenn der Thread von einer GUI Aktion aufgerufen wurde, ist die Variable leer. Anderenfalls enthält sie eine der folgenden Zeichenfolgen: Normal: Das Ereignis war ein einfacher Linksklick oder eine Tastatureingabe. Dieser Wert wird auch für Menüeinträge und besondere Ereignisse wie GuiClose und GuiEscape verwendet. DoubleClick: Das Ereignis war ein Doppelklick. Achtung: Der erste Klick löst ein Normal Ereignis aus, d.h. die Subroutine wird zweimal nacheinander mit den Werten Normal und DoubleClick aufgerufen. RightClick: Das Ereignis war ein Rechtsklick, gilt nur für GuiContextMenu, ListViews und TreeViews. Kontextabhängige Werte: Detaillierte Beschreibungen finden sich in GuiContextMenu, GuiDropFiles, Slider, MonthCal, ListView und TreeView. |
| A_EventInfo |
Enthält zusätzliche Informationen für die folgenden Ereignisse:
|
Achtung: Anders als Variable wie A_ThisHotkey erhält jeder Thread eigene Werte für A_Gui, A_GuiControl, A_GuiX/Y, A_GuiEvent und A_EventInfo. Wenn ein Thread durch einen anderen unterbrochen wird, sind bei seiner Fortsetzung die ursprünglichen Variablenwerte weiterhin vorhanden.
| A_ThisMenuItem | Der Name des zuletzt gewählten Menüeintrags (sonst leer). |
| A_ThisMenu | Der Name des Menüs, von dem A_ThisMenuItem gewählt wurde. |
| A_ThisMenuItemPos | Eine Zahl, die der aktuellen Position von A_ThisMenuItem innerhalb von A_ThisMenu entspricht. Das erste Element eines Menüs ist 1, das zweite ist 2 usw., Trennzeilen werden mitgezählt. Die Variable ist leer, wenn A_ThisMenuItem leer ist oder in A_ThisMenu nicht mehr existiert. Sie ist ebenso leer, wenn A_ThisMenu selbst nicht mehr existiert. |
| A_ThisHotkey |
Der Name des zuletzt ausgeführten Hotkeys oder Hotstrings (sonst leer), z.B. #z. Dieser Wert ändert sich, wenn der aktuelle Thread durch einen anderen Hotkey unterbrochen wird, deshalb sollte man die Variable sofort in eine andere Variable speichern, wenn der Wert später in der Subroutine noch gebraucht wird. Bei der Erstellung des Hotkeys -- entweder mit dem Hotkey Kommando oder einer :: Sprungmarke im Skript -- werden sowohl die Tasten als auch die Modifikationstasten/symbole in der vorgegebenen Reihenfolge zum Namen des Hotkeys. Siehe auch: A_ThisLabel |
| A_PriorHotkey | Wie A_ThisHotkey, nur für den vorangegangenen Hotkey (sonst leer). |
| A_TimeSinceThisHotkey | Die Anzahl der verstrichenen Millisekunden seit A_ThisHotkey gedrückt wurde. Wenn A_ThisHotkey leer ist, enthält die Variable -1. |
| A_TimeSincePriorHotkey | Die Anzahl der verstrichenen Millisekunden seit A_PriorHotkey gedrückt wurde. Wenn A_PriorHotkey leer ist, enthält die Variable -1. |
| A_EndChar | Das Endezeichen des letzten nicht automatisch ersetzenden Hotstrings. Wenn kein Endezeichen gefordert wurde, z.B. durch die * Option, ist die Variable leer. |
| ComSpec [v1.0.43.08+] |
Beeinhaltet den Wert der ComSpec Umgebungsvariable (z.B. C:\Windows\system32\cmd.exe). Die Variable wird oft in Run/RunWait verwendet. Achtung: Diese Variable hat kein "A_" Präfix. |
| A_Temp [v1.0.43.09+] |
Der vollständige Pfad des Ordners für temporäre Dateien (z.B. C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Temp). Der Wert wird in der angegebenen Reihenfolge bestimmt durch: 1) die Umgebungsvariablen TMP, TEMP oder USERPROFILE; 2) das Windowsverzeichnis (unter Windows 9x wird A_WorkingDir verwendet, wenn weder TMP noch TEMP existieren). |
| A_OSType | Der Typ des aktuellen Betriebssystems: Entweder WIN32_WINDOWS (d.h. Windows 95/98/ME) oder WIN32_NT (d.h. Windows NT4/2000/XP/2003/Vista). |
| A_OSVersion |
Die Version des aktuellen Betriebssystem: WIN_VISTA [ab v1.0.44.13+], WIN_2003, WIN_XP, WIN_2000, WIN_NT4, WIN_95, WIN_98, WIN_ME. Z.B.: if A_OSVersion in WIN_NT4,WIN_95,WIN_98,WIN_ME ; Achtung: Keine Leerzeichen zwischen Kommas und Werten. |
| A_Language | Die Standardsprache des Systems, einer dieser 4-stelligen Codes. |
| A_ComputerName | Der Name des Computers, wie er im Netzwerk aufscheint. |
| A_UserName | Der Name, unter dem der aktuelle Benutzer angemeldet ist. |
| A_WinDir | Das Windowsverzeichnis, z.B.: C:\Windows |
| A_ProgramFiles or ProgramFiles |
Das Programmverzeichnis, z.B. C:\Programme. Ab Version v1.0.43.08 kann das A_ Präfix weggelassen werden, damit wird die Umstellung auf #NoEnv vereinfacht. |
| A_AppData [v1.0.43.09+] |
Das Anwendungsdatenverzeichnis des aktuellen Benutzers, z.B.: C:\Dokumente und Einstellungen\Benutzername\Anwendungsdaten |
| A_AppDataCommon [v1.0.43.09+] |
Das Anwendungsdatenverzeichnis für alle Benutzer (All Users). |
| A_Desktop | Das Desktopverzeichnis des aktuellen Benutzers. |
| A_DesktopCommon | Das Desktopverzeichnis für alle Benutzer. |
| A_StartMenu | Der Startmenüordner des aktuellen Benutzers. |
| A_StartMenuCommon | Der Startmenüordner für alle Benutzer. |
| A_Programs | Der Programmeordner im Startmenü des aktuellen Benutzers. |
| A_ProgramsCommon | Der Programmeordner im Startmenü für alle Benutzer. |
| A_Startup | Der Autostartordner im Startmenü des aktuellen Benutzers. |
| A_StartupCommon | Der Autostartordner im Startmenü für alle Benutzer. |
| A_MyDocuments | Der Ordner"Eigene Dateien" des aktuellen Benutzers. Im Gegensatz zu den meisten ähnlichen Variablen wird das abschließende \ nicht angehängt, wenn das Verzeichnis ein Wurzelverzeichnis ist, die Variable enthält dann z.B. M: und nicht M:\ |
| A_IsAdmin | Die Variable enthält 1, wenn der aktuelle Benutzer über Administratorrechte verfügt, sonst 0. Unter Windows 95/98/Me enthält die Variable immer 1. |
|
A_ScreenWidth |
Die Breite und Höhe des primären Bildschirms in Pixeln (z.B. 1024 und 768). Um die Dimensionen weiterer Bildschirme in einem Umfeld mit mehreren Bildschirmen zu ermitteln, verwendet man SysGet. Die Breite und Höhe des gesamten Desktops kann,
auch wenn er sich über mehrere Bildschirme erstreckt, wie
folgt
ermittelt werden (unter Windows 95/NT liefern beide Anweisungen 0): Zusätzlich kann mit SysGet der Arbeitsbereich eines Bildschirms ermittelt werden. Dieser kann kleiner als die tatsächliche Bildschirmfläche sein, weil z.B. die Taskleiste und andere registrierte Desktopleisten ausgeschlossen werden. |
| A_IPAddress1 bis 4 | Die IP-Addressen der ersten vier Netzwerkkarten. |
| A_Cursor |
Der Typ des aktuell angezeigten Mauszeigers als einer der folgenden Werte: AppStarting, Arrow, Cross, Help, IBeam, Icon, No, Size, SizeAll, SizeNESW, SizeNS, SizeNWSE, SizeWE, UpArrow, Wait, Unknown. Die Abkürzungen für die Größenänderungszeiger (Size) sind Himmelsrichtungen, z.B. NESW = NorthEast(Nordost)+SouthWest(Südwest). Die handförmigen Zeiger für Zeigen und Greifen werden als "Unknown" klassifiziert. Bekannte Einschränkungen (in Versionen vor
1.0.42.02 oder
unter Windows 95): Wenn die Variable mit hoher Frequenz (d.h. alle 500
ms oder öfter) abgefragt wird, kann dadurch die Erkennung von
Doppelklicks verhindert werden. Eine Abhilfe ist nicht bekannt |
| A_CaretX A_CaretY |
Die aktuellen X und Y Koordinaten der Texteinfügemarke. Die Koordinaten sind relativ zum aktiven Fenster, wenn sie nicht durch CoordMode als relativ zum gesamten Bildschirm gesetzt wurden. Wenn kein Fenster aktiv ist oder die Texteinfügemarke nicht gefunden werden kann, sind beide Variablen leer. Mit dem folgenden Skript kann man die Texteinfügemarke bewegen. Die aktuelle Position wird in einem selbstaktualisierenden Tooltip angezeigt. Achtung: Einige Fenster wie z.B. bestimmte MS Word Versionen liefern immer dieselbe Positionsangabe, unabhängig von der wirklichen Position. #Persistent Wenn die Variablen mit hoher Frequenz (d.h. alle 500 ms oder öfter) abgefragt werden, kann dadurch die Erkennung von Doppelklicks verhindert werden. Eine Abhilfe ist nicht bekannt |
| Clipboard | Der Text in der Zwischenablage, lesende und schreibende Zugriffe sind möglich (siehe auch Clipboard). |
| ClipboardAll | Der komplette Inhalt der Zwischenablage, auch formatierter Text, Bilder usw. (siehe auch ClipboardAll). |
| ErrorLevel | Siehe ErrorLevel. |
| A_LastError | Das Ergebnis der Betriebssystemfunktion GetLastError(). Nähere Details finden sich unter DllCall() und Run/RunWait. |
| A_Index | Die Nummer des aktuellen Schleifendurchlaufs (eine 64-bittige Ganzzahl). Wenn der Schleifeninhalt zum ersten Mal ausgeführt wird, enthält A_Index den Wert 1. Nähere Details finden sich unter Loop. |
| A_LoopFileName, etc. | Diese und weitere zugehörige Variablen sind nur in einer file-loop (Dateisystemschleife) vorhanden. |
| A_LoopRegName, etc. | Diese und weitere zugehörige Variablen sind nur in einer registry-loop (Registrierungsschleife) vorhanden. |
| A_LoopReadLine | Siehe file-reading loop (Dateien lesen). |
| A_LoopField | Siehe parsing loop (Zeichenfolgen auswerten). |
Umgebungsvariablen werden vom Betriebssystem verwaltet. Man kann sie in einem CMD-Fenster mit dem Kommando SET auflisten.
Ein Skript kann mit EnvSet neue Umgebungsvariablen erzeugen oder den Inhalt vorhandener verändern. Solche Veränderungen sind aber für das restliche System nicht sichtbar. Nur Programme oder andere Skripte, die per Run oder RunWait gestartet werden, können auf die neuen oder geänderten Umgebunsvariablen zugreifen.
Ab Version v1.0.43.08+ sollten alle neuerstellten Skripte auf Umgebungsvariablen wie z.B. Path nur noch mit der folgenden Anweisung zugreifen:
EnvGet, OutputVar, Path ; Die Erklärung findet sich unter #NoEnv.