Menu

Erstellt, löscht, ändert und zeigt Menüs und Menüpunkte. Ändert das Tray-Symbol und dessen Tooltip. Bestimmt, 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ü wird automatisch erstellt, wenn dessen Name zum ersten Mal zusammen mit dem Add-Unterbefehl verwendet wird. Zum Beispiel: Menu, MeinMenü, Add, Menüpunkt1. Sobald ein benutzerdefiniertes Menü erstellt wurde, kann es mit dem Show-Unterbefehl angezeigt werden. Mit dem Add-Unterbefehl kann es auch als Untermenü zu anderen Menüs hinzugefügt werden.

Die Parameter Unterbefehl, Wert1, Wert2, Wert3 und Wert4 sind voneinander abhängig und können wie folgt verwendet 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 zum Menü hinzugefügt. Andernfalls wird MenüpunktName mit dem neuen LabelOderUntermenü aktualisiert.

Um eine Trennlinie zum Menü hinzuzufügen, lassen Sie alle drei Parameter weg.

Die Label-Subroutine wird als neuer Thread ausgeführt, wenn der Benutzer den Menüpunkt auswählt (vergleichbar mit Gosub und Hotkey-Subroutinen). Wenn LabelOderUntermenü weggelassen wird, wird MenüpunktName sowohl als Labelname als auch als Menüpunktname verwendet.

[v1.1.20+]: Für LabelOderUntermenü kann auch der Name einer Funktion, sofern dieser Name nicht als Label existiert, oder eine einzelne Variablenreferenz mit einem Funktionsobjekt angegeben werden. 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. Für die Funktion können optional die folgenden Parameter definiert werden:

FunktionName(PunktName, PunktPos, MenüName)

Wenn MenüpunktName ein Untermenü werden soll - also ein Menüpunkt, der ein neues Menü öffnet - muss für LabelOderUntermenü ein Doppelpunkt gefolgt vom MenüName eines existierenden 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 von einer oder mehreren der folgenden Optionen sein, die jeweils mit einem Leer- oder Tabulatorzeichen voneinander getrennt sind:

Option Beschreibung
Pn Geben Sie für n die Thread-Priorität des Menüpunkts an, z.B. P1. Wenn diese Option beim Hinzufügen eines Menüpunkts weggelassen wird, wird standardmäßig Priorität 0 verwendet. Wenn diese Option beim Ändern eines Menüpunkts weggelassen wird, bleibt die Priorität des Menüpunkts unverändert. Verwenden Sie eine dezimale (nicht hexadezimale) Zahl für diese Option.
+Radio [v1.1.23+]: Wenn der Menüpunkt abgehakt ist, wird ein fetter Punkt anstelle eines Häkchens angezeigt.
+Right [v1.1.23+]: Macht den Menüpunkt innerhalb der Menüleiste rechtsbündig. Dies gilt nur für Menüleisten, nicht für Kontextmenüs oder Untermenüs.
+Break [v1.1.23+]: Der Menüpunkt beginnt eine neue Spalte in einem Kontextmenü.
+BarBreak [v1.1.23+]: Dasselbe 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.

Um die Optionen eines existierenden Menüpunkts zu ändern, ohne sein Label oder Untermenü zu beeinflussen, lassen Sie einfach den LabelOderUntermenü-Parameter weg.

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 ist (siehe MenüpunktName, um mehr zu erfahren) und dass EinzufügenderPunkt der Name eines neuen Menüpunkts ist, der vor MenüpunktName eingefügt werden soll. Menüpunkte können auch durch Weglassen von MenüpunktName (zwei aufeinanderfolgende Kommas) angefügt werden. Im Gegensatz zum Add-Unterbefehl erstellt der Insert-Unterbefehl immer einen neuen Menüpunkt, egal ob MenüpunktName bereits als Menüpunkt existiert.

Delete

Löscht 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). Vordefinierte Menüpunkte wie "Exit" (siehe unten) können nicht einzeln gelöscht werden. Die Löschung des Standardmenüpunkts hat denselben Effekt wie, als hätte man den NoDefault-Unterbefehl verwendet.

Wenn MenüpunktName weggelassen wird, wird das gesamte MenüName-Menü gelöscht, sowie alle Menüpunkte in anderen Menüs, die MenüName als Untermenü verwenden. Die Löschung eines Menüs bewirkt zudem, dass das aktuelle Win32-Menü von jedem seiner Untermenüs zerstört wird, damit es später bei Bedarf neu erstellt werden kann. Andere Menüs, die solche Untermenüs enthalten, könnten ebenfalls betroffen sein. Dies lässt sich vermeiden, indem man vor dem Löschen des Menüs die Menüpunkte mit DeleteAll löscht.

DeleteAll

Löscht alle benutzerdefinierten Menüpunkte aus dem Menü.

Menu, MenüName, DeleteAll

Eventuell vorhandene vordefinierte Menüpunkte (siehe unten) bleiben davon unberührt. Im Gegensatz zu einem Menü, das via Delete-Unterbefehl (siehe oben) gelöscht wurde, bleibt ein leeres Menü weiterhin existent, d.h. andere Menüs, die es als Untermenü verwenden, behalten solche Untermenüs.

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 Ziellabel oder Untermenü des Menüpunkts bleibt unverändert. [v1.1.23+]: Um eine Trennlinie in einen normalen Menüpunkt umzuwandeln, geben Sie die Position der Trennlinie wie z.B. 1& für MenüpunktName und einen nicht-leeren Namen für NeuerName an und verwenden Sie dann den Add-Unterbefehl, um dem Menüpunkt ein Label oder Untermenü zuzuweisen.

Check

Setzt ein sichtbares Häkchen neben einen bestimmten Menüpunkt (sofern noch nicht geschehen).

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 Häkchen neben einen bestimmten Menüpunkt, sofern noch nicht geschehen, oder entfernt es wieder.

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 auszuwählen, falls er zuvor deaktiviert (ausgegraut) wurde.

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

Stellt einen bestimmten Menüpunkt grau dar, um kenntlich zu machen, dass der Benutzer ihn nicht auswählen 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

Verbietet die Interaktion mit einem bestimmten Menüpunkt, falls noch nicht geschehen, oder erlaubt sie wieder.

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 Standardmenüpunkt und stellt ihn fett dar.

Menu, MenüName, Default , MenüpunktName

Das Setzen des Standardmenüpunkts ist für ein anderes Menü als TRAY 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 Standardmenüpunkt ausgewählt. Wenn es keinen Standardmenüpunkt gibt, ist der Doppelklick wirkungslos. Wenn MenüpunktName weggelassen wird, ist der Effekt derselbe wie, als hätte man den NoDefault-Unterbefehl unten verwendet.

NoDefault

Macht das Setzen eines benutzerdefinierten Standardmenüpunkts rückgängig.

Menu, MenüName, NoDefault

Beim Tray-Menü: Stellt den vordefinierten Standardmenüpunkt wieder her - bei unkompilierten Skripten ist das "Open" und bei kompilierten Skripten nichts (außer wenn der MainWindow-Unterbefehl aktiv ist). Wenn der Menüpunkt "Open" nicht existiert, weil zuvor der NoStandard-Unterbefehl verwendet wurde, gibt es keinen Standardmenüpunkt, d.h. ein Doppelklick auf das Tray-Symbol ist wirkungslos. Bei anderen Menüs als TRAY: Der Standardmenüpunkt (falls vorhanden) wird nicht mehr fett dargestellt.

Standard

Fügt die vordefinierten Menüpunkte am Ende des Menüs an (sofern noch nicht vorhanden).

Menu, MenüName, Standard

Dieser Unterbefehl kann für das Tray-Menü oder jedes andere Menü verwendet werden.

NoStandard

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

Menu, MenüName, NoStandard

Dieser Unterbefehl kann für das Tray-Menü oder jedes andere Menü verwendet werden.

Icon

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

Tray-Symbol setzen

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

Menu, Tray, Icon , DateiName, SymbolNummer, Einfrieren

Folgende Dateitypen werden unterstützt: ICO, CUR, ANI, EXE, DLL, CPL, SCR und andere Typen, die Symbolressourcen enthalten. Um eine andere Symbolgruppe als die erste in der Datei zu verwenden, geben Sie für SymbolNummer die entsprechende Nummer an (wenn weggelassen, wird standardmäßig 1 verwendet). Zum Beispiel bewirkt 2, dass das Standardsymbol aus der zweiten Symbolgruppe geladen wird. Wenn SymbolNummer negativ ist, wird dessen Absolutwert als Ressourcen-ID eines Symbols innerhalb einer EXE-Datei vermutet. Geben Sie für DateiName ein Sternchen (*) an, um das Standardsymbol wiederherzustellen.

Geben Sie 1 für Einfrieren an, um das Symbol einzufrieren, oder 0, um es wieder aufzutauen (oder lassen Sie es leer, um den gefrorenen/ungefrorenen Zustand unverändert zu lassen). Ein eingefrorenes Symbol kann nicht durch Pause oder Suspend geändert werden. Hinweis: Um das aktuelle Symbol einzufrieren oder aufzutauen, verwenden Sie den Einfrieren-Parameter wie folgt: Menu, Tray, Icon,,, 1.

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

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

Es können leichte Verformungen auftreten, wenn Tray-Symbole aus anderen Dateitypen als ICO geladen werden. Dieses Problem tritt insbesondere bei 16x16-Symbolen auf. Um das zu verhindern, speichern Sie das gewünschte Tray-Symbol in eine ICO-Datei.

Es gibt einige Symbole in den DLL- und CPL-Dateien des Betriebssystems, die nützlich sein können. Zum Beispiel: Menu, Tray, Icon, Shell32.dll, 174.

Die internen Variablen A_IconNumber und A_IconFile enthalten die Nummer und den 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 Symbol-Handle verwendet werden. Zum Beispiel Menu Tray, Icon, HICON:*%Handle%. Das Sternchen ist notwendig, 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 oder ein beliebiges Bild in einem von AutoHotkey unterstützten Format sein. Um eine andere Symbolgruppe als die erste in der Datei zu verwenden, geben Sie für SymbolNummer die entsprechende Nummer an (wenn weggelassen, wird standardmäßig 1 verwendet). Wenn SymbolNummer negativ ist, wird dessen Absolutwert als Ressourcen-ID eines Symbols innerhalb einer EXE-Datei vermutet. Geben Sie für SymbolBreite die gewünschte Breite des Symbols an. Wenn die via SymbolNummer angegebene Symbolgruppe mehrere Symbolgrößen enthält, wird das am ehesten passende Symbol verwendet und auf die angegebene Größe skaliert. Anwendungsbeispiele finden Sie unter Beispiel #4.

Derzeit ist es notwendig, die "tatsächliche Größe" beim Setzen des Symbols anzugeben, wenn in Windows Vista oder höher dessen Transparenz erhalten bleiben soll, z.B. Menu, MeinMenü, Icon, Menüpunkt1, Dateiname.png,, 0.

Bekannte Einschränkung: In Windows XP und höher werden Symbole in 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.

Tray-Symbol entfernen

Entfernt das Tray-Symbol, falls vorhanden.

Menu, Tray, NoIcon

Wenn Sie diesen Unterbefehl ganz oben im Skript verwenden, werden Sie feststellen, dass das Tray-Symbol beim Start des Skripts kurz sichtbar ist. Um das zu verhindern, verwenden Sie stattdessen #NoTrayIcon. Die interne Variable A_IconHidden enthält 1, wenn das Tray-Symbol gerade versteckt ist, andernfalls 0.

Menüpunktsymbol entfernen [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 LF-Zeichen (`n), z.B. Zeile1`nZeile2. Es werden nur die ersten 127 Zeichen von Text angezeigt. Außerdem wird Text am ersten Tabulatorzeichen abgeschnitten, falls vorhanden. Wenn Text weggelassen wird, 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).

Windows 10 und niedriger: Um ein Und-Zeichen (&) im Tooltip anzuzeigen, versehen Sie es mit zwei zusätzlichen Und-Zeichen. Zum Beispiel bewirkt A &&& B, dass "A & B" im Tooltip angezeigt wird.

Show

Zeigt MenüName an.

Menu, MenüName, Show , X, Y

Der Benutzer kann einen Menüpunkt mit Pfeiltasten, Tastaturkurzbefehlen (unterstrichene Buchstaben) oder mit dem Mauszeiger auswählen. Mit Ausnahme von GUI-Menüleisten kann jedes Menü, einschließlich des Tray-Menüs, angezeigt werden. Wenn sowohl X als auch Y weggelassen werden, wird das Menü an der aktuellen Position des Mauszeigers angezeigt. Wenn nur eine der beiden Koordinaten angegeben ist, wird für die jeweils andere die aktuelle Position des Mauszeigers verwendet. Die Koordinaten sind relativ zum aktiven Fenster. Geben Sie davor CoordMode, Menu an, um sie relativ zum gesamten Bildschirm zu machen.

Color

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

Menu, MenüName, Color, FarbeWert , Single

FarbeWert ist einer der 16 primären HTML-Farbnamen oder ein 6-stelliger RGB-Farbwert (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 der Untermenüs geändert.

Click

Wie oft das Tray-Symbol geklickt werden muss, um den Standardmenüpunkt auszuwählen.

Menu, Tray, Click, KlicksAnzahl

Wenn KlicksAnzahl 1 ist, muss das Tray-Symbol nur einmal angeklickt werden, um den Standardmenüpunkt auszuwählen. Wenn KlicksAnzahl 2 ist, wird das Standardverhalten (Doppelklick) wiederhergestellt. Zum Beispiel: Menu, Tray, Click, 1. Wenn KlicksAnzahl größer als 2 ist, wird automatisch 2 verwendet. Wenn KlicksAnzahl kleiner als 1 ist, wird automatisch 1 verwendet.

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 versteckten Hauptfensters des Skripts, wie z.B. "Lines most recently executed", was 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 vordefinierten Menüpunkt "Open" aus dem Tray-Menü. Er deaktiviert außerdem die Menüpunkte im View-Menü des versteckten Hauptfensters des Skripts, 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 auszuwählen, wenn sie während der Skriptausführung erreicht werden: ListLines, ListVars, ListHotkeys und KeyHistory.

Dieser Unterbefehl verhindert nicht, dass das Hauptfenster mit WinShow sichtbar gemacht oder mit ControlGetText oder ähnlichem inspiziert werden kann, 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 dieser Unterbefehl nie im Skript verwendet wird, gilt standardmäßig OFF. 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 diesen Unterbefehl wieder auszuschalten, geben Sie OFF (oder 0 in [v1.1.30+]) im nächsten Parameter an. Diese Einstellung ist global, d.h. sie wirkt sich auf alle Menüs aus, nicht nur auf 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 Hinzufügen oder Ändern von Menüpunkten zeichnet der Menu-Befehl den Namen und andere Eigenschaften der einzelnen Menüpunkte auf, aber das eigentliche Win32-Menü wird nicht sofort konstruiert. Dies geschieht, wenn das Menü oder sein übergeordnetes Menü angezeigt oder mit einer GUI verbunden wird, entweder zum ersten Mal oder wenn das Menü seit seiner letzten Anzeige "zerstört" wurde. Die folgenden Dinge können dazu führen, dass dieses Win32-Menü zerstört wird:

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

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

Alle Änderungen, die direkt via Win32-API-Aufrufe am Menü vorgenommen 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 darauf verlassen, dass ein Menüpunkt eine bestimmte ID erhält, aber sie können die ID eines Menüpunkts via GetMenuItemID abrufen, wie im MenuGetHandle-Beispiel gezeigt. Diese ID kann nicht mit dem Menu-Befehl verwendet werden, sondern nur mit diversen 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, MeinMenü, Add (also ohne die restlichen Parameter) können Trennlinien zum Menü hinzugefügt werden. [v1.1.23+]: Um einzelne Trennlinien gezielt zu löschen, identifizieren Sie sie via Position innerhalb des Menüs. Zum Beispiel können Sie Menu, MeinMenü, Delete, 3& verwenden, wenn zwei Menüpunkte vor der Trennlinie sind. Alternativ können Sie auch Menu, MeinMenü, DeleteAll verwenden und dann Ihre benutzerdefinierten Menüpunkte neu hinzufügen.

Neue Menüpunkte werden immer am Ende des Menüs hinzugefügt. Beim Tray-Menü: Wenn Sie Ihre Menüpunkte vor die vordefinierten Menüpunkte setzen wollen (nachdem Sie Ihre Menüpunkte hinzugefügt haben), führen Sie Menu, Tray, NoStandard gefolgt von Menu, Tray, Standard aus.

Es ist nicht möglich, auf vordefinierte Menüpunkte wie z.B. "Pause Script" und "Suspend Hotkeys" einzeln mit einem Menu-Unterbefehl zuzugreifen.

Wenn ein Menü komplett leer ist - z.B. via Menu, MeinMenü, DeleteAll - kann es nicht angezeigt werden. Wenn das Tray-Menü leer ist, haben Rechtsklick und Doppelklick auf das Tray-Symbol keine Wirkung (in solchen Fällen ist es üblicherweise besser, #NoTrayIcon zu verwenden).

Wenn die Subroutine eines Menüpunkts gerade ausgeführt wird und der Benutzer denselben Menüpunkt erneut auswählt, wird ein neuer Thread erstellt, um dieselbe Subroutine auszuführen, und der vorherige Thread unterbrochen. Um solche Ereignisse stattdessen zu puffern, geben Sie Critical in der ersten Zeile der Subroutine an (allerdings werden dadurch auch andere Threads, wie z.B. das Drücken eines Hotkeys, gepuffert/verzögert).

Jede 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, den der Benutzer zuletzt ausgewählt hat (leer, wenn nichts ausgewählt wurde). Die interne Variable A_ThisMenu enthält den Namen des Menüs, wo A_ThisMenuItem ausgewählt wurde. Diese Variablen sind nützlich, um ein Menü zu erstellen, dessen Inhalt nicht immer gleich ist. In diesem Fall empfiehlt es sich, alle Menüpunkte auf dasselbe Label zu verweisen und mit den obigen Variablen zu bestimmen, was getan werden soll.

Um ein Skript ohne Hotkey und GUI dauerhaft laufen zu lassen - z.B. ein Skript, das nur benutzerdefinierte Menüs oder Menüpunkte enthält - verwenden Sie #Persistent.

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

Beispiele

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

#Persistent  ; Skript laufen lassen, 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 Kontextmenü, das beim Drücken eines Hotkeys angezeigt wird.

; Kontextmenü durch Hinzufügen von Menüpunkten erstellen.
Menu, MeinMenü, Add, Element1, MenuHandler
Menu, MeinMenü, Add, Element2, MenuHandler
Menu, MeinMenü, Add  ; Trennlinie hinzufügen.

; Ein weiteres Menü erstellen, das als Untermenü für das obige Menü dient.
Menu, Submenu1, Add, Element1, MenuHandler
Menu, Submenu1, Add, Element2, MenuHandler

; Ein Untermenü im ersten Menü erstellen (ein Rechtspfeilindikator). Wenn der Benutzer es auswählt, wird das zweite Menü angezeigt.
Menu, MeinMenü, Add, Mein Untermenü, :Submenu1

Menu, MeinMenü, Add  ; Trennlinie unter dem Untermenü hinzufügen.
Menu, MeinMenü, Add, Element3, MenuHandler  ; Einen weiteren Menüpunkt unter dem Untermenü hinzufügen.
return  ; Ende des automatischen Ausführungsbereichs.

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

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

Zeigt 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 ; Dasselbe 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

Zeigt, 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 ; 2. Symbolgruppe aus der Datei
Menu, DateiMenü, Icon, Suspend-Symbol, %A_AhkPath%, -206 ; Symbol mit Ressourcen-ID 206
Menu, DateiMenü, Icon, Pause-Symbol, %A_AhkPath%, -207 ; Symbol mit Ressourcen-ID 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

Zeigt, wie mit BoundFunc-Objekten zusätzliche Parameter übergeben werden können, wenn eine Funktion anstelle einer Subroutine verwendet wird.

; 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
}