Ein Label identifiziert eine Codezeile und kann als Goto-Ziel oder zur Erstellung einer Subroutine verwendet werden. Es gibt drei verschiedene Arten von Labels: Normale benannte Labels, Hotkey-Labels und Hotstring-Labels.
Normale Labels bestehen aus einem Namen gefolgt von einem Doppelpunkt:
das_ist_ein_Label:
Hotkey-Labels bestehen aus einem Hotkey gefolgt von zwei Doppelpunkten:
^a::
Hotstring-Labels bestehen aus einem Doppelpunkt, beliebig vielen Optionen, einem weiteren Doppelpunkt, einer Abkürzung und zwei Doppelpunkten:
:*:bzw::
Abgesehen von Leerraumzeichen und Kommentaren darf grundsätzlich kein weiterer Code auf der Zeile eines Labels stehen. Allerdings:
return
angegeben worden.a::b
Hotkeys und Labels für *a
und *a Up
, aber kein Label mit dem Namen a
.Namen: Labelnamen sind nicht Groß-/Kleinschreibung-sensitiv und können aus beliebigen Zeichen bestehen, außer Leerzeichen, Tabulatorzeichen, Komma und Escapezeichen (`). Allerdings ist es aufgrund von Gestaltungsrichtlinien grundsätzlich besser, nur Buchstaben, Zahlen und Unterstriche zu verwenden (zum Beispiel: MeineListView, Menü_Datei_Öffnen und äußere_Schleife). Labelnamen müssen im gesamten Skript eindeutig sein.
Obwohl es keine reservierten Namen gibt, wird dringend empfohlen, die folgenden Namen nicht zu verwenden: On, Off, Toggle, AltTab, ShiftAltTab, AltTabAndMenu und AltTabMenuDismiss. Diese Werte haben eine besondere Bedeutung für den Hotkey-Befehl.
Ziel: Das Ziel eines Labels ist die nächste ausführbare Codezeile. Ausführbarer Code umfasst Befehle, Zuweisungen, Ausdrücke und Blöcke, aber keine Direktiven, Labels, Hotkeys oder Hotstrings. Im folgenden Beispiel verweisen run_notepad
und #n
auf dieselbe Run
-Zeile:
run_notepad: #n:: Run Notepad return
Ausführung: Labels haben wie Direktiven keine Wirkung, wenn sie während einer normalen Ausführung erreicht werden. Im folgenden Beispiel wird ein Mitteilungsfenster zweimal angezeigt - einmal, wenn die Subroutine von Gosub ausgeführt wird, und noch einmal, nachdem die Subroutine ihr Return erreicht hat:
Gosub Label1 Label1: MsgBox %A_ThisLabel% return
Eine Subroutine ist ein Teil des Codes, der aufgerufen werden kann, um eine bestimmte Aufgabe durchzuführen. Die Ausführung einer Subroutine beginnt beim Ziel eines Labels und endet, wenn ein Return oder Exit erreicht wird. Da das Ende einer Subroutine vom Kontrollfluss abhängt, kann jedes Label als Goto-Ziel und als Start einer Subroutine fungieren.
Viele Befehle, die einen Labelnamen akzeptieren, akzeptieren auch eine Variablenreferenz wie %MeinLabel%, um den Inhalt der Variable als Ziel zu verwenden. Dies geschieht jedoch auf Kosten der Performanz, da das Ziellabel jedes Mal neu gesucht werden muss, nicht nur beim Start des Skripts.
Jeder Zweifach-Doppelpunkt-Hotkey erzeugt ebenfalls ein Label, es sei denn, es handelt sich um einen Funktions-Hotkey. Der Name des Labels entspricht genau dem, wie er im Skript geschrieben steht, und kann vom Namen des Hotkeys (widergespiegelt durch A_ThisHotkey) abweichen, z.B. wenn die Modifikatoren in einer anderen Reihenfolge geschrieben sind. Der Labelname enthält die Modifikatoren des Hotkeys, aber nicht die zwei Doppelpunkte am Ende (::
).
Der Name eines Hotstring-Labels enthält den ersten Doppelpunkt und die Optionen, aber nicht die zwei Doppelpunkte am Ende (::
).
Hotkey- und Hotstring-Labels sind auch gültige Ziele für Goto, Gosub und andere Befehle. Allerdings kann ein Hotkey- oder Hotstring-Label nur auf diese Weise verwendet werden, wenn es das erste Label mit dem angegebenen Namen ist. Zum Beispiel:
gosub ^+a ; Beispiel-Hotkey. gosub +^a ; Globaler Hotkey. gosub Esc ; Esc-Label. ExitApp #IfWinActive Beispiel ^+a::MsgBox Beispiel-Hotkey. Esc: MsgBox Esc-Label. return #If +^a::MsgBox Globaler Hotkey. Esc::MsgBox Esc-Hotkey.
Diese Einschränkung gilt auch für den Label-Parameter des Hotkey-Befehls.
Ein Label kann auch verwendet werden, um eine Schleife für die Befehle Continue und Break zu identifizieren. Dadurch kann das Skript von einer inneren Schleife heraus den aktuellen Durchlauf einer äußeren Schleife überspringen oder die äußere Schleife unterbrechen.
[v1.1.20+]: In einigen Fällen können Funktionen anstelle von Labels verwendet werden. Zum Beispiel:
Funktionen haben den Vorteil, dass sie lokale Variablen verwenden können und in einigen Fällen (wie z.B. Gui-Steuerelement-Ereignisse) auch Parameter mit nützlichen Informationen akzeptieren.
IsLabel(), A_ThisLabel, Gosub, Goto, OnExit, SetTimer, Hotkey, Gui-Ereignisse, g-Label, OnClipboardChange-Label