Menu

Erstellt, löscht, ändert und zeigt Menüs und Menüpunkte. Ändert das Tray-Symbol und dessen Tooltip. Kontrolliert, ob das Hauptfenster eines kompilierten Skripts geöffnet werden kann.

Menu, MenüName, Unterbefehl , Wert1, Wert2, Wert3, Wert4

Der MenüName-Parameter kann Tray oder der Name eines benutzerdefinierten Menüs sein. Ein benutzerdefiniertes Menü steht automatisch zur Verfügung, nachdem man das erste Mal den Add-Unterbefehl in Verbindung mit dem Namen des Menüs verwendet hat. Zum Beispiel: Menu, MeinMenü, Add, Menüpunkt1. Einmal erstellt, kann ein benutzerdefiniertes Menü mit dem Show-Unterbefehl angezeigt werden. Mit dem Add-Unterbefehl kann es zudem als Untermenü an andere Menüs angefügt werden.

Die Parameter Unterbefehl, Wert1, Wert2, Wert3 und Wert4 sind voneinander abhängig und können wie folgt genutzt werden.

Inhaltsverzeichnis

Unterbefehle

Geben Sie für Unterbefehl Folgendes an:

Add

Fügt einen Menüpunkt hinzu, aktualisiert einen Menüpunkt mit einem neuen Untermenü oder Label, oder wandelt einen normalen Menüpunkt in ein Untermenü um (oder umgekehrt).

Menu, MenüName, Add , MenüpunktName, LabelOderUntermenü, Optionen

Dieser Unterbefehl ist für mehrere Zwecke gedacht. MenüpunktName ist der Name oder die Position eines Menüpunkts (siehe MenüpunktName, um mehr zu erfahren). Wenn MenüpunktName noch nicht existiert, wird er in das Menü eingefügt. Ansonsten wird MenüpunktName mit dem neu angegebenen LabelOderUntermenü aktualisiert.

Um eine Trennlinie in das Menü einzufügen, lassen Sie alle drei Parameter weg.

Die Label-Subroutine wird als neuer Thread gestartet, wenn der Benutzer den Menüpunkt anklickt (vergleichbar mit Gosub und Hotkey-Subroutinen). Lässt man LabelOderUntermenü weg, wird MenüpunktName sowohl als Labelname als auch als Menüpunktname verwendet.

[v1.1.20+]: Wenn es nicht der Name eines vorhandenen Labels ist, kann LabelOderUntermenü der Name einer Funktion sein, oder eine einzelne Variablenreferenz mit einem Funktionsobjekt. Zum Beispiel %FunkObj% oder % FunkObj. Ein voll funktionsfähiges Beispiel finden Sie unter Beispiel #5. Andere Ausdrücke, die Objekte zurückgeben, werden zurzeit nicht unterstützt. Optional kann die Funktion wie folgt Parameter definieren:

FunktionName(PunktName, PunktPos, MenüName)

Wenn MenüpunktName ein Untermenü werden soll - also ein Menüpunkt, der ein neues Menü öffnet - muss in LabelOderUntermenü ein Doppelpunkt und der MenüName eines vorhandenen benutzerdefinierten Menüs angegeben werden. Zum Beispiel:

Menu, MeinUntermenü, Add, Menüpunkt1
Menu, Tray, Add, Dieser Menüpunkt ist ein Untermenü, :MeinUntermenü

Sofern vorhanden, muss Optionen eine Liste mit einer oder mehreren Optionen sein, die jeweils mit einem Leer- oder Tabulatorzeichen voneinander getrennt sind:

Option Beschreibung
Pn Ersetzen Sie n mit der Thread-Priorität des Menüpunktes, z. B. P1. Lässt man diese Option beim Hinzufügen eines Menüpunktes weg, wird standardmäßig eine Priorität von 0 verwendet. Lässt man diese Option beim Ändern eines Menüpunktes weg, bleibt die Priorität des Menüpunktes unverändert. Verwenden Sie eine dezimale (nicht hexadezimale) Zahl als Priorität.
+Radio [v1.1.23+]: Verwendet zum Abhaken des Menüpunktes einen kleinen Kreis anstelle eines Häkchens.
+Right [v1.1.23+]: Der Menüpunkt ist innerhalb der Menüleiste rechtsbündig. Diese Option funktioniert nur bei Menüleisten, nicht bei Popup-Menüs oder Untermenüs.
+Break [v1.1.23+]: Der Menüpunkt beginnt eine neue Spalte in einem Popup-Menü.
+BarBreak [v1.1.23+]: Das gleiche wie oben, aber mit Trennlinien zwischen den Spalten.

Das Pluszeichen (+) ist optional und kann mit einem Minuszeichen (-) ersetzt werden, um die Option zu entfernen, wie z. B. -Radio. Optionen sind nicht Groß-/Kleinschreibung-sensitiv.

Wenn der LabelOderUntermenü-Parameter weggelassen wird, können die Optionen eines vorhandenen Menüpunktes geändert werden, ohne dessen Label oder Untermenü zu beeinflussen.

Insert [v1.1.23+]

Fügt einen neuen Menüpunkt vor einem bestimmten Menüpunkt ein.

Menu, MenüName, Insert , MenüpunktName, EinzufügenderPunkt, LabelOderUntermenü, Optionen

Die Verwendung ist identisch zum Add-Unterbefehl oben, außer dass MenüpunktName immer der Name oder die Position eines existierenden Menüpunkts (siehe MenüpunktName, um mehr zu erfahren) ist und dass EinzufügenderPunkt der Name eines neuen Menüpunkts ist, der vor MenüpunktName eingefügt werden soll. Menüpunkte kann man auch anfügen, indem man MenüpunktName weglässt (also wenn man zwei aufeinanderfolgende Kommas schreibt). Im Gegensatz zum Add-Unterbefehl erstellt der Insert-Unterbefehl immer einen neuen Menüpunkt, egal ob MenüpunktName bereits als Menüpunkt existiert.

Delete

Entfernt einen bestimmten Menüpunkt aus dem Menü.

Menu, MenüName, Delete , MenüpunktName

MenüpunktName ist der Name oder die Position eines Menüpunkts (siehe MenüpunktName, um mehr zu erfahren). Voreingestellte Menüpunkte wie "Exit" (siehe unten) können nicht einzeln gelöscht werden. Den Standard-Menüpunkt mit diesem Unterbefehl zu entfernen hat denselben Effekt wie, als hätte man den NoDefault-Unterbefehl verwendet.

Lässt man MenüpunktName weg, wird das gesamte MenüName-Menü gelöscht, sowie alle Menüpunkte in anderen Menüs, die MenüName als Untermenü verwenden. Das Löschen eines Menüs bewirkt zudem, dass das aktuelle Win32-Menü all seiner Untermenüs zerstört wird, um später bei Bedarf neu erstellt werden zu können. Andere Menüs, die solche Untermenüs enthalten, könnten ebenfalls davon betroffen sein. Um das zu vermeiden, löschen Sie die Menüpunkte mit DeleteAll, bevor Sie das Menü selbst löschen.

DeleteAll

Entfernt alle benutzerdefinierten Menüpunkte aus dem Menü.

Menu, MenüName, DeleteAll

Eventuell vorhandene voreingestellte Menüpunkte (siehe unten) bleiben unberührt. Im Gegensatz zu einem gelöschten Menü via Delete-Unterbefehl (siehe oben), bleibt ein leeres Menü weiterhin bestehen; andere Menüs, die dieses leere Menü als Untermenü verwenden, werden demzufolge solche Untermenüs beibehalten.

Rename

Benennt einen bestimmten Menüpunkt in NeuerName um.

Menu, MenüName, Rename, MenüpunktName , NeuerName

Wenn NeuerName leer ist, wird der angegebene Menüpunkt in eine Trennlinie umgewandelt. MenüpunktName ist der Name oder die Position eines Menüpunkts (siehe MenüpunktName, um mehr zu erfahren). Das aktuelle Ziel-Label oder Untermenü des Menüpunkts bleibt unverändert. [v1.1.23+]: Eine Trennlinie kann man in einen normalen Menüpunkt umwandeln, indem man die Position& der Trennlinie und einen nicht-leeren NeuerName angibt, und dann den Add-Unterbefehl verwendet, um dem Menüpunkt ein Label oder Untermenü zu geben.

Check

Setzt ein sichtbares Häkchen neben einem bestimmten Menüpunkt (wenn es noch nicht da ist).

Menu, MenüName, Check, MenüpunktName

MenüpunktName ist der Name oder die Position eines Menüpunkts (siehe MenüpunktName, um mehr zu erfahren).

Uncheck

Entfernt das Häkchen (sofern vorhanden) von einem bestimmten Menüpunkt.

Menu, MenüName, Uncheck, MenüpunktName

MenüpunktName ist der Name oder die Position eines Menüpunkts (siehe MenüpunktName, um mehr zu erfahren).

ToggleCheck

Setzt ein sichtbares Häkchen neben einem bestimmten Menüpunkt; wenn es schon gesetzt ist, wird es wieder entfernt.

Menu, MenüName, ToggleCheck, MenüpunktName

MenüpunktName ist der Name oder die Position eines Menüpunkts (siehe MenüpunktName, um mehr zu erfahren).

Enable

Erlaubt dem Benutzer, einen bestimmten Menüpunkt wieder anzuklicken, falls er zuvor deaktiviert (ergraut) war.

Menu, MenüName, Enable, MenüpunktName

MenüpunktName ist der Name oder die Position eines Menüpunkts (siehe MenüpunktName, um mehr zu erfahren).

Disable

Zeigt einen bestimmten Menüpunkt in einer grauen Farbe an, um kenntlich zu machen, dass der Benutzer ihn nicht anklicken kann.

Menu, MenüName, Disable, MenüpunktName

MenüpunktName ist der Name oder die Position eines Menüpunkts (siehe MenüpunktName, um mehr zu erfahren).

ToggleEnable

Deaktiviert die Interaktion mit einem bestimmten Menüpunkt; wenn sie bereits deaktiviert ist, wird sie wieder aktiviert.

Menu, MenüName, ToggleEnable, MenüpunktName

MenüpunktName ist der Name oder die Position eines Menüpunkts (siehe MenüpunktName, um mehr zu erfahren).

Default

Macht einen bestimmten Menüpunkt zum Standard-Menüpunkt und stellt ihn in fetter Schrift dar.

Menu, MenüName, Default , MenüpunktName

In einem Menü, das nicht TRAY ist, ist das Setzen des Standard-Menüpunkts rein kosmetischer Natur. MenüpunktName ist der Name oder die Position eines Menüpunkts (siehe MenüpunktName, um mehr zu erfahren). Wenn der Benutzer das Tray-Symbol doppelt anklickt, wird der Standard-Menüpunkt gestartet. Wenn es keinen Standard-Menüpunkt gibt, hat ein Doppelklick keine Wirkung. Lässt man MenüpunktName weg, erreicht man denselben Effekt wie, als hätte man den NoDefault-Unterbefehl unten verwendet.

NoDefault

Macht das Setzen eines benutzerdefinierten Standard-Menüpunkts rückgängig.

Menu, MenüName, NoDefault

Beim Tray-Menü: Stellt den voreingestellten Standard-Menüpunkt wieder her - bei unkompilierten Skripten ist das OPEN und bei kompilierten Skripten nichts (außer wenn der MainWindow-Unterbefehl aktiv ist). Wenn der OPEN-Menüpunkt durch vorheriges Verwenden des NoStandard-Unterbefehls nicht vorhanden ist, wird es keinen Standard-Menüpunkt geben; ein Doppelklick auf das Tray-Symbol wird demzufolge keine Wirkung haben. Bei Menüs, die nicht TRAY sind: Alle vorhandenen Standard-Menüpunkte werden nicht mehr in fetter Schrift dargestellt.

Standard

Fügt die voreingestellten Menüpunkte an das untere Ende des Menüs ein (sofern sie nicht bereits vorhanden sind).

Menu, MenüName, Standard

Dieser Unterbefehl kann in Verbindung mit einem Tray-Menü oder jedem anderen Menü verwendet werden.

NoStandard

Entfernt alle voreingestellten (nicht benutzerdefinierten) Menüpunkte aus dem Tray-Menü (sofern sie vorhanden sind).

Menu, MenüName, NoStandard

Dieser Unterbefehl kann in Verbindung mit einem Tray-Menü oder jedem anderen Menü verwendet werden.

Icon

Beeinflusst je nach folgender Syntaxnutzung das Tray-Symbol oder [in AHK_L 17+] das Symbol des Menüpunkts.

Setzen des Tray-Symbols

Ersetzt das Tray-Symbol des Skripts mit eines der Symbole aus DateiName.

Menu, Tray, Icon , DateiName, SymbolNummer, 1

Folgende Dateitypen werden unterstützt: ICO, CUR, ANI, EXE, DLL, CPL, SCR und andere Typen, die Symbolressourcen enthalten. Um anstelle der ersten Symbolgruppe eine andere in der Datei zu nutzen, geben Sie für SymbolNummer die entsprechende Nummer an (lässt man diesen Parameter weg, wird standardmäßig 1 verwendet). Zum Beispiel würde 2 das Standardsymbol aus der zweiten Symbolgruppe laden. Wenn SymbolNummer negativ ist, wird dessen absoluter Wert als Ressourcen-ID eines Symbols innerhalb einer ausführbaren Datei vermutet. Fügen Sie ein Sternchen (*) in DateiName ein, um das Standardsymbol wiederherzustellen.

Der letzte Parameter: Geben Sie eine 1 im letzten Parameter an, um das Symbol einzufrieren, oder eine 0, um es wieder freizugeben (oder lassen Sie den Parameter leer, um den eingefrorenen/freigegebenen Zustand unverändert zu lassen). Wenn das Symbol eingefroren wurde, kann es nicht von Pause und Suspend geändert werden. Hinweis: Das folgende Beispiel zeigt, wie man mit einer 1 oder 0 das aktuelle Symbol einfrieren oder freigeben kann: Menu, Tray, Icon,,, 1.

Das Ändern des Tray-Symbols ändert auch das angezeigte Symbol in InputBox, Progress und danach erstellte GUI-Fenster. Kompilierte Skripte sind davon auch betroffen, selbst wenn ein benutzerdefiniertes Symbol beim Kompilieren angegeben wurde.

Hinweis: Das Ändern des Symbols wird das Tray-Symbol nicht sichtbar machen, wenn es zuvor mit Mitteln wie #NoTrayIcon versteckt wurde; um das zu tun, verwendet man Menu, Tray, Icon (ohne Parameter).

Es können leichte Verformungen auftreten, wenn Tray-Symbole aus Dateitypen geladen werden, die keine ICO-Dateien sind. Dieses Problem gilt besonders bei 16x16-Symbolen. Um das zu verhindern, speichern Sie das gewünschte Tray-Symbol in eine ICO-Datei.

Es gibt einige Symbole innerhalb der DLL- und CPL-Systemdateien, die nützlich sein könnten. Zum Beispiel: Menu, Tray, Icon, Shell32.dll, 174.

Die internen Variablen A_IconNumber und A_IconFile enthalten die Nummer und Namen (mit vollständigem Pfad) des aktuellen Symbols (beide sind leer, wenn das Standardsymbol verwendet wird).

[v1.1.23+]: Anstelle eines Dateinamens kann auch ein Icon-Handle (HICON) verwendet werden. Zum Beispiel Menu Tray, Icon, HICON:*%Handle%. Das Sternchen ist erforderlich, da das Symbol zweimal "geladen" werden muss: einmal für das kleine Symbol und einmal für das große Symbol.

[v1.1.27+]: Nicht-Symbol-Bilder und Bitmap-Handles (HBITMAP) werden für DateiName unterstützt. Zum Beispiel Menu Tray, Icon, HBITMAP:*%Handle%.

Setzt ein Symbol für einen bestimmten Menüpunkt.

Menu, MenüName, Icon, MenüpunktName, DateiName , SymbolNummer, SymbolBreite

MenüpunktName ist der Name oder die Position eines Menüpunkts (siehe MenüpunktName, um mehr zu erfahren). DateiName kann entweder eine Symboldatei sein, oder ein Bild in einem Format, das von AutoHotkey unterstützt wird. Um anstelle der ersten Symbolgruppe eine andere in der Datei zu nutzen, geben Sie für SymbolNummer die entsprechende Nummer an (lässt man diesen Parameter weg, wird standardmäßig 1 verwendet). Wenn SymbolNummer negativ ist, wird der absolute Wert dieser Nummer als Ressourcen-ID eines Symbols innerhalb einer ausführbaren Datei vermutet. Fügen Sie die gewünschte Breite des Symbols in SymbolBreite ein. Wenn die angegebene Symbolgruppe in SymbolNummer mehrere Symbolgrößen enthält, wird das Symbol auf die naheliegendste Größe skaliert. In Beispiel #4 finden Sie Anwendungsbeispiele.

Derzeit ist es notwendig, die tatsächliche Größe anzugeben, wenn die Transparenz des Symbols in Windows Vista oder höher erhalten bleiben soll. Zum Beispiel:

Menu, MenüName, Icon, MenüpunktName, Dateiname.png,, 0

Bekannte Einschränkung: In Windows XP und höher werden Symbole auf GUI-Menüleisten falsch positioniert.

[v1.1.23+]: Anstelle eines Dateinamens kann auch ein Bitmap- oder Symbol-Handle verwendet werden. Zum Beispiel HBITMAP:%handle%.

NoIcon

Beeinflusst je nach folgender Syntaxnutzung das Tray-Symbol oder [in AHK_L 17+] das Symbol des Menüpunkts.

Entfernen des Tray-Symbols

Entfernt das Tray-Symbol, sofern vorhanden.

Menu, Tray, NoIcon

Verwendet man diesen Unterbefehl ganz oben im Skript, könnte das Tray-Symbol beim Starten des Skripts kurz sichtbar sein. Um das zu verhindern, können Sie stattdessen #NoTrayIcon verwenden. Die interne Variable A_IconHidden enthält eine 1, wenn das Tray-Symbol zurzeit versteckt ist, oder ansonsten eine 0.

Entfernen eines Menüpunktsymbols [AHK_L 17+]

Entfernt das Symbol von einem bestimmten Menüpunkt, falls vorhanden.

Menu, MenüName, NoIcon, MenüpunktName

MenüpunktName ist der Name oder die Position eines Menüpunkts (siehe MenüpunktName, um mehr zu erfahren).

Tip

Ändert den Tooltip des Tray-Symbols.

Menu, Tray, Tip , Text

Der Tooltip des Tray-Symbols wird angezeigt, wenn sich der Mauszeiger darüber befindet. Um einen Tooltip mehrzeilig zu machen, trennen Sie jede Zeile mit einem Zeilenumbruchszeichen (`n), z. B. Zeile1`nZeile2. Es werden nur die ersten 127 Zeichen des Text-Parameters angezeigt, außerdem wird der Text beim ersten Tabulatorzeichen, falls vorhanden, abgeschnitten. Lässt man Text weg, wird der Standardtext des Tooltips wiederhergestellt. Die interne Variable A_IconTip enthält den aktuellen Text des Tooltips (sie ist leer, wenn der Standardtext verwendet wird).

Show

Zeigt MenüName an.

Menu, MenüName, Show , X, Y

Der Benutzer kann ein Menüpunkt mit Pfeiltasten, Tastaturkurzbefehlen (unterstrichene Buchstaben) oder mit dem Mauszeiger auswählen. Mit Ausnahme der GUI-Menüleiste kann jedes Menü, einschließlich des Tray-Menüs, angezeigt werden. Lässt man sowohl X als auch Y weg, wird das Menü bei der aktuellen Position des Mauszeigers angezeigt. Lässt man nur eine dieser Koordinaten weg, wird stattdessen die Position des Mauszeigers verwendet. Die Koordinaten sind relativ zum aktiven Fenster. Verwenden Sie davor CoordMode, Menu, um sie relativ zum ganzen Bildschirm zu machen.

Color

Setzt die Hintergrundfarbe des Menüs auf den angegebenen FarbeWert.

Menu, MenüName, Color, FarbeWert , Single

FarbeWert ist entweder einer der 16 primären HTML-Farbnamen oder ein 6-stelliger RGB-Wert (siehe Farbentabelle). Lassen Sie den FarbeWert-Parameter leer (oder verwenden Sie das Wort Default), um die Standardfarbe des Menüs wiederherzustellen. Fehlt das Wort Single im nächsten Parameter, werden auch die Hintergrundfarben seiner Untermenüs geändert.

Click

Bestimmt die Anzahl der Klicks auf das Tray-Symbol, die zum Auslösen des Standard-Menüpunkts notwendig sind.

Menu, Tray, Click, KlicksAnzahl

Fügen Sie eine 1 in KlicksAnzahl ein, damit der Standard-Menüpunkt des Tray-Menüs mit einem einzigen Klick aktiviert werden kann. Fügen Sie eine 2 in KlicksAnzahl ein, um das Standardverhalten wiederherzustellen (Doppelklick). Zum Beispiel: Menu, Tray, Click, 1.

MainWindow

Aktiviert die Möglichkeit, das Hauptfenster eines Skripts über das Tray-Symbol zu öffnen, was bei kompilierten oder eingebetteten Skripten standardmäßig nicht möglich ist.

Menu, Tray, MainWindow

Dieser Unterbefehl stellt den Menüpunkt "Open" im Tray-Menü wieder her, sofern nicht der NoStandard-Unterbefehl verwendet wurde. Er aktiviert außerdem die Menüpunkte im View-Menü des Hauptfensters, wie z. B. "Lines most recently executed", das den Quellcode des Skripts und andere Informationen anzeigt.

Dieser Modus wird standardmäßig für Skripte verwendet, die weder kompiliert noch eingebettet sind.

NoMainWindow

Verhindert, dass das Hauptfenster über das Tray-Symbol geöffnet werden kann.

Menu, Tray, NoMainWindow

Dieser Unterbefehl entfernt den Standardmenüpunkt "Open" aus dem Tray-Menü. Er deaktiviert außerdem die Menüpunkte im View-Menü des Hauptfensters, wie z. B. "Lines most recently executed". Die folgenden Befehle sind jedoch weiterhin in der Lage, das Hauptfenster zu öffnen und die entsprechenden View-Optionen zu aktivieren, sofern sie beim Ausführen des Skripts erreicht werden: ListLines, ListVars, ListHotkeys und KeyHistory.

Dieser Unterbefehl verhindert nicht, dass das Hauptfenster von WinShow angezeigt oder von ControlGetText oder ähnlichen Methoden untersucht wird, aber er verhindert, dass der Quellcode des Skripts und andere Informationen via Hauptfenster preisgegeben werden, außer wenn einer der oben aufgeführten Befehle vom Skript aufgerufen wird.

Dieser Modus wird standardmäßig für Skripte verwendet, die kompiliert oder eingebettet sind.

[v1.1.34+]: Dieser Unterbefehl kann auch in einem unkompilierten Skript verwendet werden.

UseErrorLevel

Überspringt jegliche Warndialogfenster und Thread-Terminierungen, wann immer der Menu-Befehl einen Fehler erzeugt.

Menu, MenüName, UseErrorLevel , Off

Wenn diese Option nicht im Skript angegeben ist, wird standardmäßig OFF verwendet. Die OFF-Einstellung zeigt ein Dialogfenster an und terminiert den aktuellen Thread, wann immer der Menu-Befehl einen Fehler erzeugt. Geben Sie Menu, Tray, UseErrorLevel an, um das Dialogfenster und die Terminierung des Threads zu verhindern; stattdessen wird ErrorLevel bei Misserfolg auf 1 und bei Erfolg auf 0 gesetzt. Um diese Option wieder auszuschalten, fügen Sie OFF (oder 0 in [v1.1.30+]) im nächsten Parameter ein. Diese Einstellung ist global - das heißt, dass sie alle Menüs beeinflusst, nicht nur MenüName.

Name oder Position eines Menüpunkts. Es gelten einige allgemeine Regeln für diesen Parameter, der bei vielen Unterbefehlen zu finden ist:

Win32-Menüs

Beim Einfügen oder Modifizieren von Menüpunkten werden ihre Namen und Eigenschaften vom Menu-Befehl aufgezeichnet, allerdings wird das eigentliche Win32-Menü nicht sofort konstruiert. Dies geschieht immer dann, wenn das Menü oder sein übergeordnetes Menü mit einem GUI verbunden wird oder wenn es angezeigt wird, entweder zum ersten Mal oder wenn das Menü seit seiner letzten Anzeige "zerstört" wurde. Folgende Dinge können dazu führen, dass dieses Win32-Menü zerstört wird:

Beim Zerstören des Win32-Menüs wird eventuell auch das Win32-Menü aller Untermenüs und des übergeordneten Menüs zerstört.

Wenn das Win32-Menü eines Menüs, das die voreingestellten Menüpunkte enthält, neu erstellt wird, werden die voreingestellten Menüpunkte am Anfang des Menüs platziert.

Jegliche Modifikationen am Menü, die direkt mittels Win32-API-Aufrufen durchgeführt werden, gelten nur für die aktuelle "Instanz" des Menüs, und gehen verloren, wenn das Menü zerstört wird.

Jeder Menüpunkt bekommt eine ID zugewiesen, wenn er das erste Mal zum Menü hinzugefügt wird. Skripte können sich nicht auf einen Menüpunkt mit einer bestimmten ID verlassen, aber sie können die ID eines Menüpunktes via GetMenuItemID abrufen, wie im MenuGetHandle-Beispiel gezeigt. Diese ID kann nicht in Verbindung mit dem Menu-Befehl verwendet werden, sondern nur in Verbindung mit den Win32-Funktionen.

Bemerkungen

Ein typisches Menü sieht wie folgt aus:

Menu

Die Namen der Menüs und Menüpunkte können bis zu 260 Zeichen lang sein.

Mit Menu, MenüName, Add (ohne die restlichen Parameter) können Trennlinien in das Menü eingefügt werden. [v1.1.23+]: Um einzelne Trennlinien gezielt zu löschen, identifizieren Sie sie anhand ihrer Position im Menü. Zum Beispiel Menu, MenüName, Delete, 3&, wenn zwei Menüpunkte vor der Trennlinie sind. Alternativ können Sie Menu, MenüName, DeleteAll verwenden und dann Ihre benutzerdefinierten Menüpunkte neu einfügen.

Neue Menüpunkte werden immer am unteren Ende des Menüs eingefügt. Beim Tray-Menü: Um die eigenen Menüpunkte vor den voreingestellten Menüpunkten zu setzen (nachdem eigene Menüpunkte bereits eingefügt wurden), ist es erforderlich, Menu, Tray, NoStandard und anschließend Menu, Tray, Standard auszuführen.

Kein einziger Menu-Unterbefehl kann mit voreingestellten Menüpunkten wie "Pause Script" und "Suspend Hotkeys" agieren.

Ein Menü, das komplett leer ist - z. B. via Menu, MeinMenü, DeleteAll - kann nicht angezeigt werden. Wenn das Tray-Menü leer ist, wird das Anklicken des Tray-Symbols keine Wirkung haben (in solchen Fällen ist es üblicherweise besser, #NoTrayIcon zu verwenden).

Wenn die Subroutine des Menüpunkts bereits läuft und der Benutzer diesen Menüpunkt wieder auswählt, wird ein neuer Thread erstellt, um die gleiche Subroutine nochmals auszuführen, und der vorherige Thread unterbrochen. Um solche Ereignisse stattdessen zu puffern und später auszulösen, können Sie Critical in der ersten Zeile der Subroutine nutzen (allerdings werden dadurch auch andere Threads, wie z. B. das Drücken eines Hotkeys, gepuffert/hinausgezögert).

Jedes via Menüpunkt gestartete Subroutine verwendet vorerst die Standardwerte von Einstellungen wie SendMode. Diese Standardwerte können im automatischen Ausführungsbereich geändert werden.

Die internen Variablen A_ThisMenuItem und A_ThisMenuItemPos enthalten den Namen und die Position des benutzerdefinierten Menüpunkts, der zuletzt vom Benutzer ausgewählt wurde (sie sind leer, wenn kein Menüpunkt ausgewählt wurde). Außerdem ist A_ThisMenu der Name des Menüs, in dem A_ThisMenuItem ausgewählt wurde. Diese Variablen sind nützlich, wenn man ein Menü erstellt, dessen Inhalte nicht immer gleich sind. In so einem Fall empfiehlt es sich, alle Menüpunkte auf das gleiche Label verweisen und dieses Label auf die oben genannten Variablen zurückgreifen zu lassen, um die zu ergreifenden Maßnahmen zu bestimmen.

Um ein Skript ohne Hotkey und GUI dauerhaft laufen zu lassen -- z. B. ein Skript, das ausschließlich benutzerdefinierte Menüs oder Menüpunkte enthält -- ist es erforderlich, #Persistent zu verwenden.

GUI, Threads, Thread, Critical, #NoTrayIcon, Gosub, Return, SetTimer, #Persistent

Beispiele

Fügt einen neuen Menüpunkt am unteren Ende des Tray-Symbol-Menüs hinzu.

#Persistent  ; Hält das Skript aufrecht, bis der Benutzer es beendet.
Menu, Tray, Add  ; Erstellt eine Trennlinie.
Menu, Tray, Add, Element1, MenuHandler  ; Erstellt einen neuen Menüpunkt.
return

MenuHandler:
MsgBox Sie haben %A_ThisMenuItem% im Menü %A_ThisMenu% ausgewählt.
return

Erstellt ein aufklappbares Menü, das angezeigt wird, wenn der Benutzer einen Hotkey drückt.

; Erstellt ein aufklappbares Menü durch Hinzufügen von Menüpunkten.
Menu, MeinMenü, Add, Element1, MenuHandler
Menu, MeinMenü, Add, Element2, MenuHandler
Menu, MeinMenü, Add  ; Fügt eine Trennlinie ein.

; Erstellt ein weiteres Menü, das als Untermenü für das obige Menü dienen soll.
Menu, Submenu1, Add, Element1, MenuHandler
Menu, Submenu1, Add, Element2, MenuHandler

; Erstellt ein Untermenü im ersten Menü (mit einem nach rechts gerichteten Pfeil). Sobald der Benutzer dieses Untermenü auswählt, wird das zweite Menü angezeigt.
Menu, MeinMenü, Add, Mein Untermenü, :Submenu1

Menu, MeinMenü, Add  ; Fügt eine Trennlinie unterhalb des Untermenüs ein.
Menu, MeinMenü, Add, Element3, MenuHandler  ; Fügt einen weiteren Menüpunkt unterhalb des Untermenüs ein.
return  ; Ende des automatischen Ausführungsbereichs.

MenuHandler:
MsgBox Sie haben %A_ThisMenuItem% im Menü %A_ThisMenu% ausgewählt.
return

#z::Menu, MeinMenü, Show  ; Drücken Sie WIN+Z, um das Menü anzuzeigen.

Demonstriert einige der verschiedenen Menu-Unterbefehle.

#Persistent
#SingleInstance
Menu, Tray, Add ; Trennlinie
Menu, Tray, Add, TestToggle&Check
Menu, Tray, Add, TestToggleEnable
Menu, Tray, Add, TestDefault
Menu, Tray, Add, TestStandard
Menu, Tray, Add, TestDelete
Menu, Tray, Add, TestDeleteAll
Menu, Tray, Add, TestRename
Menu, Tray, Add, Test
return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

TestToggle&Check:
Menu, Tray, ToggleCheck, TestToggle&Check
Menu, Tray, Enable, TestToggleEnable ; Aktiviert auch den nächsten Test, da es die Deaktivierung von sich selbst nicht rückgängig machen kann.
Menu, Tray, Add, TestDelete ; Das gleiche wie oben.
return

TestToggleEnable:
Menu, Tray, ToggleEnable, TestToggleEnable
return

TestDefault:
if (Default = "TestDefault")
{
    Menu, Tray, NoDefault
    Default := ""
}
else
{
    Menu, Tray, Default, TestDefault
    Default := "TestDefault"
}
return

TestStandard:
if (Standard != false)
{
    Menu, Tray, NoStandard
    Standard := false
}
else
{
    Menu, Tray, Standard
    Standard := true
}
return

TestDelete:
Menu, Tray, Delete, TestDelete
return

TestDeleteAll:
Menu, Tray, DeleteAll
return

TestRename:
if (NeuerName != "unbenannt")
{
    AlterName := "TestRename"
    NeuerName := "unbenannt"
}
else
{
    AlterName := "unbenannt"
    NeuerName := "TestRename"
}
Menu, Tray, Rename, %AlterName%, %NeuerName%
return

Test:
MsgBox Sie haben %A_ThisMenuItem% im Menü %A_ThisMenu% ausgewählt.
return

Demonstriert, wie man Symbole zu Menüpunkten hinzufügt.

Menu, Dateimenü, Add, Skript-Symbol, MenuHandler
Menu, Dateimenü, Add, Suspend-Symbol, MenuHandler
Menu, Dateimenü, Add, Pause-Symbol, MenuHandler
Menu, Dateimenü, Icon, Skript-Symbol, %A_AhkPath%, 2 ; Verwendet die zweite Symbolgruppe aus der Datei
Menu, Dateimenü, Icon, Suspend-Symbol, %A_AhkPath%, -206 ; Symbol mit dem Ressourcenidentifikator 206
Menu, Dateimenü, Icon, Pause-Symbol, %A_AhkPath%, -207 ; Symbol mit dem Ressourcenidentifikator 207
Menu, MeineMenüleiste, Add, &Datei, :Dateimenü
Gui, Menu, MeineMenüleiste
Gui, Add, Button, gExit, Beendet dieses Beispiel
Gui, Show
return

MenuHandler:
return

Exit:
ExitApp

Demonstriert, wie man mit BoundFunc-Objekten zusätzliche Parameter übergeben kann, wenn man eine Funktion anstelle einer Subroutine verwendet.

; Parameter an die Funktion binden und BoundFunc-Objekte zurückgeben:
BoundGivePar := Func("GivePar").Bind("First", "Test one")
BoundGivePar2 := Func("GivePar").Bind("Second", "Test two")

; Das Menü erstellen und anzeigen:
Menu MeinMenü, Add, Parameter übergeben, % BoundGivePar
Menu MeinMenü, Add, Parameter2 übergeben, % BoundGivePar2
Menu MeinMenü, Show

; Definition der benutzerdefinierten Funktion GivePar:
GivePar(a, b, PunktName, PunktPos, MenüName)
{
    MsgBox % "a:`t`t" a "`n"
           . "b:`t`t" b "`n"
           . "PunktName:`t" PunktName "`n"
           . "PunktPos:`t`t" PunktPos "`n"
           . "MenüName:`t" MenüName
}