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 von der Ablaufsteuerung 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

Hotkey- und Hotstring-Label sind auch gültige Ziele für Goto, Gosub und andere Befehle. Wenn ein Hotkey oder Hotstring jedoch mehrere Varianten hat, dann wird die oberste Variante im Skript verwendet. Alle Modifikatoren des Hotkeys oder Optionen des Hotstrings gehören auch zum Labelnamen, aber die zwei Doppelpunkte (::) werden weggelassen.

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