.
Code: Select all
RunCalc := Func("Run").Bind("calc.exe")
oMenu := {Main:[ {name: "This menu will be disabled", icon: "Shell32,45", disabled: true, label: RunCalc}
, {name: "This menu won't be shown" , icon: "Shell32,46", hidden: true, label: "MenuHandler1"}
, {}
, {name: "Item3", icon: "Shell32,47", label: {SubMenu:[ {name: "Item1", icon: "Shell32,48", label: "MenuHandler2"}
, {name: "Item2", icon: "Shell32,49", label: "MenuHandler2"} ]}} ]}
menuName := CreateMenu(oMenu)
Menu, % menuName, Show
Return
CreateMenu(oMenu) {
for k, v in oMenu {
for i, v in v {
if v.hidden
continue
if !IsObject(v.label)
Menu, % k, Add, % v.name, % v.label
else if (v.label.Count() = "") {
handler := v.label
Menu, % k, Add, % v.name, % handler
}
else
Menu, % k, Add, % v.name, % ":" CreateMenu(v.label)
if v.disabled
Menu, % k, Disable, % v.name
if v.icon {
RegExMatch(v.icon, "(?<file>[^,]+)(,(?<num>.+))?", _)
Menu, % k, Icon, % v.name, % _file, % _num
}
}
}
Return k
}
MenuHandler1() {
MsgBox, % "This Menu: " . A_ThisMenu . "`nMenu Item: " . A_ThisMenuItem
}
MenuHandler2() {
MsgBox, % "This Menu: " . A_ThisMenu . "`nMenu Item: " . A_ThisMenuItem
}
Run(Target) {
Run, % Target
return
}