Code: Select all
; Created by RP alias divanebaba
; Version: Prinzip-Demo 05.06.2017
;
; Funktion:
; Nach Betätigen der Tastenkombination AltGr & ä, öffnet sich an der Mausposition ein Menu.
; Mit "[color=#0000FF]ifwinactive[/color]" kann das Menu bestimmten Programmen
; ausgewählte Makros, Zusatzprogramme, Pfade etc. zur Verfügung stellen
; Hier, als Beispiel, Notepad und Paint, denen verschiedene Menueintäge zur Verfügung gestellt werden.
; Die Menüs können folgendermaßen zusammengestell werden
;
; Alle Einträge werden mit einem Komma getrennt. Siehe Beispiel:
; Eintrag_1,Eintrag_2,Eintrag_3,Eintrag_4,Eintrag_5
;
; Eintrag_1 = Menueintrag
; Eintrag_2 = Label [muss entfallen, wenn Eintrag_5 Pfad zur exe]
; Eintrag_3 = Iconname ohne Endung [muss entfallen, wenn Eintrag_5 Pfad zur exe]
; Eintrag_4 = Icongröße [kann entfallen, wenn Eintrag_5 Pfad zur exe]
; Eintrag_5 = Pfadname zur ausführbaren Datei
; Trennstriche werden mit einem einzigen Komma erzeugt
; +++++++++++++++++++++++++++++++++++++++++++++++++++
; Anmerkung zu Eintrag_2, und Eintrag_3.
; Sollten eigene Icons benutzt werden, wird ein Unterordner namens icons benötigt
; iconpath = % a_ScriptDir . "\" . "icons"
; dort können benutzerdefinierte Icons abgelegt und über Eintrag_3 eingelesen werden
; +++++++++++++++++++++++++++++++++++++++++++++++++++
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn ; Enable warnings to assist with detecting common errors.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
#SingleInstance force
; Benötigt einen Ordner mit Icons
iconpath = % a_ScriptDir . "\" . "icons"
mEditor = ; SUBMENUE Solid Edge
(
WordPad,,,,C:\Windows\write.exe
MSCONFIG,,,,C:\Windows\System32\msconfig.exe
WordPad,,,,C:\Windows\write.exe
)
mPaint =
(
Rechner,,,,C:\Windows\System32\calc.exe
Notepad,,,64,C:\Windows\notepad.exe
RegEdit,,,48,C:\Windows\regedit.exe
WordPad,,,32,C:\Windows\write.exe
)
mMenu1 =
(
MSPaint,,,,C:\Windows\System32\mspaint.exe
Notepad,,,48,C:\Windows\notepad.exe
RegEdit,,,32,C:\Windows\regedit.exe
Rechner,,,,C:\Windows\System32\calc.exe
MSCONFIG,,,,C:\Windows\System32\msconfig.exe
SnippingTool,,,,C:\Windows\System32\SnippingTool.exe
DirektX-Diagnose,,,,C:\Windows\System32\dxdiag.exe
)
mMenu2 =
(
Notepad,,,48,C:\Windows\notepad.exe
RegEdit,,,32,C:\Windows\regedit.exe
WordPad,,,,C:\Windows\write.exe
)
; Blöcke mit Untermenüs
; Da die Menues erst erstellt werden müssen, bevor sie als Untermenue eingebunden werden können, werden Blöcke mit verweisenden Untermenues separat erstellt
Menu1 =
(
,
Untermenu Editor,:mEditor
Untermenu Paint,:mPaint
Untermenu Menu2,:mMenu2
)
Menu2 =
(
,
Untermenu Editor,:mEditor
Untermenu Paint,:mPaint
Untermenu Menu1,:mMenu1
)
Menu_Editor =
(
,
Untermenu Paint,:mPaint
Untermenu Menu1,:mMenu1
Untermenu Menu2,:mMenu2
)
Menu_Paint =
(
,
Untermenu Editor,:mEditor
Untermenu Menu1,:mMenu1
Untermenu Menu2,:mMenu2
)
Menu1=%mMenu1%`n%Menu1%
Menu2=%mMenu2%`n%Menu2%
Menu_Editor=%mEditor%`n%Menu_Editor%
Menu_Paint=%mPaint%`n%Menu_Paint%
All_Menu = mMenu1|mMenu2|mEditor|mPaint|Menu1|Menu2|Menu_Editor|Menu_Paint
loop, parse, All_Menu, |
{ menu_name:=A_Loopfield
Loop, parse, %A_Loopfield%, `n, `r
{
If (!A_Loopfield or SubStr(A_Loopfield,1,1)=";")
Continue
Stringsplit, Eintrag_, A_Loopfield, `,
ifequal, Eintrag_1
Menu, %menu_name%, add
if Eintrag_1 <>
{
If (SubStr(Eintrag_2,1,1)=":")
{
Menu, %menu_name%, Add, %Eintrag_1%, %Eintrag_2%
ifnotequal Eintrag_3
Menu, %menu_name%, Icon, %Eintrag_1%, %iconpath%\%Eintrag_3%.ico, , %Eintrag_4%
}
else
{
Menu, %menu_name%, Add, %Eintrag_1%, MenuHandler
ifnotequal Eintrag_3
Menu, %menu_name%, Icon, %Eintrag_1%, %iconpath%\%Eintrag_3%.ico, , %Eintrag_4%
else
{
if !Eintrag_4
Eintrag_4=32
Menu, %menu_name%, Icon, %Eintrag_1%, %Eintrag_5%, 1, %Eintrag_4%
}
}
}
}
}
; ############ MENULISTEN
Tray=
(
,
SnippingTool,,,,C:\Windows\System32\SnippingTool.exe
DirektX-Diagnose,,,,C:\Windows\System32\dxdiag.exe
,
Notepad,,,48,C:\Windows\notepad.exe
)
Tray=%Tray%`n%Menu1%
Loop, parse, Tray, `n, `r
{
If (!A_Loopfield or SubStr(A_Loopfield,1,1)=";")
Continue
Stringsplit, Eintrag_, A_Loopfield, `,
if (!Eintrag_1 && !Eintrag_2)
Menu, Tray, add
if Eintrag_1 <>
{
ifequal, Eintrag_2
{
Menu, Tray, Add, %Eintrag_1%, MenuHandler
ifnotequal Eintrag_3
Menu, Tray, Icon, %Eintrag_1%, %iconpath%\%Eintrag_3%.ico,, %Eintrag_4%
continue
}
If (SubStr(Eintrag_2,1,1)=":")
{
Menu, Tray, Add, %Eintrag_1%, %Eintrag_2%
ifnotequal Eintrag_3
Menu, Tray, icon, %Eintrag_1%, %iconpath%\%Eintrag_3%.ico,, %Eintrag_4%
}
else
{
Menu, Tray, Add, %Eintrag_1%, MenuHandler
ifnotequal Eintrag_3
Menu, Tray, Icon, %Eintrag_1%, %iconpath%\%Eintrag_3%.ico, , %Eintrag_4%
else
{
if !Eintrag_4
Eintrag_4=32
Menu, Tray, Icon, %Eintrag_1%, %Eintrag_5%, 1, %Eintrag_4%
}
}
}
}
Menu, Tray, Icon, %A_AhkPath%, 2
Return
MenuHandler:
Loop, parse, %A_ThisMenu%, `n, `r
{
IfInString, A_LoopField, %A_ThisMenuItem%
{
Stringsplit, EintragIn_, A_Loopfield, `,
{
ifnotequal, EintragIn_2
gosub %EintragIn_2%
else
{
ifexist, %EintragIn_5%
run %EintragIn_5%
else
msgbox %EintragIn_5%`n`nnot exist.
}
return
}
}
}
return
RAlt & ä::
settitlematchmode, 2
ifwinactive, - Editor
{
Menu, Menu_Editor, show
return
}
ifwinactive, - Paint
{
Menu, Menu_Paint, show
return
}
Menu, Menu1, show
return