Тема: AHK: Управление функцией, при помощи параметра другой функции
Хочу сделать код, который формирует пункты меню, более компактным, при этом чтобы пути к EXE файлам и иконкам хранились в переменных.
В результате сделал две простые функции:
StMenu - для пунктов меню, которые используют иконку EXE файла.
StMenuCI - для пунктов меню, которые используют сторонние иконки.
Пример:
Menu, progs, UseErrorLevel
chrome:="C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
firefox:="C:\Program Files\Mozilla Firefox\firefox.exe"
StMenu("Mozilla Firefox", "firefox", "progs")
StMenu("Google Chrome", "chrome", "progs")
StMenuCI("Mozilla Firefox Custom Icon", "firefox", chrome, "", "", "progs")
Return
chrome:
try Run, %chrome%
Return
firefox:
try Run, %firefox%
Return
VK5D::Menu, progs, Show ; Menu Key
return
StMenu(itemname, handlername, menuname){
Menu, %menuname%, Add, %itemname%, %handlername%
iconpath:=%handlername%
Menu, %menuname%, Icon, %itemname%, %iconpath%,,
}
return
StMenuCI(itemname, handlername, iconpath, n1, n2, menuname){
Menu, %menuname%, Add, %itemname%, %handlername%
Menu, %menuname%, Icon, %itemname%, %iconpath%,%n1%,%n2%
}
return
Как правильно добавить ту часть кода, которая отвечает за запуск EXE в функцию, и возможно ли управлять ею через параметр?
Т.е. допустим у нас есть функция StMenuH и есть параметр, значение которого содержит путь к EXE файлу. Как его передать второй функции Handler? Или, быть может есть другой способ, как это всё правильно объединить?
Если сделать так, то при выборе любого пункта, будет запускаться EXE который соответствует последнему пункту меню.
Menu, progs, UseErrorLevel
chrome:="C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
firefox:="C:\Program Files\Mozilla Firefox\firefox.exe"
StMenuH("Mozilla Firefox", "firefox", "progs")
StMenuH("Google Chrome", "chrome", "progs")
Return
VK5D::Menu, progs, Show ; Menu Key
return
StMenuH(itemname, handlername, menuname){
Global
Menu, %menuname%, Add, %itemname%, Handler
iconpath:=%handlername%
Menu, %menuname%, Icon, %itemname%, %iconpath%,,
}
return
Handler() {
Global
try Run, %iconpath%
}
P.S.Пока только изучаю возможности AHK и стандартного меню, так что сразу извиняюсь если код выглядит как очередной кривой велосипед.