Labels

Inhaltsverzeichnis

Syntax und Verwendung

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:

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

Subroutinen

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.

Dynamische Labels

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.

Hotkeys und Hotstrings

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.

Benannte Schleifen

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.

Funktionen

[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