Label

Inhaltsverzeichnis

Syntax und Verwendung

Ein Label identifiziert eine Codezeile. Es dient als Ziel von Goto oder formt eine Subroutine. Es gibt drei verschiedene Labeltypen: Normale benannte Label, Hotkey-Label und Hotstring-Label.

Normale Label bestehen aus einem Namen, gefolgt von einem Doppelpunkt.

das_ist_ein_Label:

Hotkey-Label bestehen aus einem Hotkey, gefolgt von zwei Doppelpunkten.

^a::

Hotstring-Label bestehen aus einem Doppelpunkt, null oder mehr Optionen, einem weiteren Doppelpunkt, einer Abkürzung und zwei Doppelpunkten.

:*:bzw::

Grundsätzlich darf, außer Leerraumzeichen und Kommentare, kein anderer Code auf der Zeile eines Labels stehen. Allerdings:

Namen: Labelnamen sind nicht Groß-/Kleinschreibung-sensitiv und können aus beliebigen Zeichen, außer Leerzeichen, Tabulator, Komma und Escapezeichen (`), bestehen. Allerdings sollten die Namen aufgrund von Gestaltungsrichtlinien nur aus Buchstaben, Zahlen und Unterstriche bestehen (zum Beispiel: MeineListView, Menü_Datei_Öffnen und outer_loop). Labelnamen dürfen nur einmal im ganzen Skript vorkommen.

Zwar gibt es keine reservierten Namen, allerdings sollten die folgenden Namen nicht verwendet werden: On, Off, Toggle, AltTab, ShiftAltTab, AltTabAndMenu und AltTabMenuDismiss. Diese Werte haben eine besondere Bedeutung beim Hotkey-Befehl.

Ziel: Das Ziel eines Labels ist die nächste Zeile mit ausführbarem Code. Ausführbarer Code beinhaltet Befehle, Zuweisungen, Ausdrücke und Blöcke, aber nicht Direktiven, Label, 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 eine MsgBox zweimal angezeigt - einmal beim Ausführen der Subroutine durch Gosub und nochmals, 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 abhängig vom Kontrollfluss ist, kann jedes Label als Goto-Ziel und als Beginn einer Subroutine fungieren.

Dynamische Label

Viele Befehle, die einen Labelnamen akzeptieren, akzeptieren auch eine Variablenreferenz wie %MeinLabel% - in diesem Fall wird der Name, der in der Variable enthalten ist, als Ziel verwendet. Allerdings geschieht das auf Kosten der Leistung, weil das Ziellabel jedes Mal neu gesucht werden muss und nicht wie sonst nur beim Starten 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 ist, und kann vom Namen des Hotkeys (wie von A_ThisHotkey zurückgegeben) abweichen, z. B. wenn die Modifikatoren in einer anderen Reihenfolge geschrieben sind. Der Labelname enthält die Modifikatoren des Hotkeys, aber nicht den abschließenden Zweifach-Doppelpunkt (::).

Der Name des Hotstring-Labels enthält am Anfang den Doppelpunkt und die Optionen, aber nicht den abschließenden Zweifach-Doppelpunkt (::).

Hotkey- und Hotstring-Label 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 dazu verwendet werden, eine Schleife für die Befehle Continue und Break zu identifizieren. Dies ermöglicht dem Skript, von einer inneren Schleife heraus den aktuellen Durchlauf einer äußeren Schleife zu überspringen oder die äußere Schleife zu unterbrechen.

Funktionen

[v1.1.20+]: In einigen Fällen können Funktionen anstelle von Labels verwendet werden, dazu zählen:

Die Vorteile von Funktionen sind, dass sie lokale Variablen verwenden können und dass sie 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