Maybe try to change the hotkey
F1 to another key.
Code: Select all
menuData =
(
subMenu1
item1 = a
item2 = b
subMenu2
item3 = c
item4 = d
)
menu1 := new textMenu(menuData, "OnMenuSelect")
return
:X:nu::menu1.show()
OnMenuSelect(Command) {
SendInput, {Text}%Command%
}
class textMenu
{
__New(ByRef VariableOrFileName, FunctionName := "") {
if !IsFunc(FunctionName)
throw FunctionName " is not a valid function name"
this.dat := this.dataToArray(VariableOrFileName)
this.fn := FunctionName
this.menuName := &this
for i, line in this.dat
{
if tabCount := this.isSubMenu(i)
this.begin_subMenu(i, tabCount)
else
{
line := LTrim(line, "`t")
this.addMenu(line)
if (SubStr(line, 1, 1) = ".")
Menu, % this.menuName, Disable, % SubStr(line, 2)
if this.isEndOfSubMenu(i)
this.add_subMenu()
}
}
this.dat := this.fn := this.subMenu := ""
}
__Delete() {
Menu, % this.menuName, Delete
}
addMenu(ByRef line) {
if (line ~= "^-{3,}")
Menu, % this.menuName, Add
else
{
if !RegExMatch(line, "^(.*?)\s*=\s*(.*)$", m) {
m1 := line
}
m1 := LTrim(m1, ".")
fn := Func(this.fn).Bind(m2)
Menu, % this.menuName, Add, % m1, % fn
}
}
nextLineTabCount(i) {
if ( i+1 <= this.dat.MaxIndex() )
&& ( RegExMatch(this.dat[i+1], "P)^\t+", tabCount) )
return tabCount
}
isEndOfSubMenu(i) {
return this.nextLineTabCount(i) < this.subMenu.tabCount
}
isSubMenu(i) {
tabs := this.nextLineTabCount(i)
return (tabs > this.subMenu.tabCount) ? tabs : 0
}
begin_subMenu(i, tabCount) {
this.subMenu := { name: this.menuName
, text: LTrim(this.dat[i], "`t")
, tabCount: tabCount
, pre_subMenu: this.subMenu }
this.menuName := &this "_" i
}
add_subMenu() {
Menu, % this.subMenu.name, Add, % this.subMenu.text, % ":" this.menuName
this.menuName := this.subMenu.name
this.subMenu := this.subMenu.pre_subMenu
}
dataToArray(ByRef VariableOrFileName) {
if FileExist(VariableOrFileName)
content := FileOpen(VariableOrFileName, "r").Read()
else
content := VariableOrFileName
content := Trim(content, "`r`n")
content := RegExReplace(content, "\R+", "`n")
return StrSplit(content, "`n", "`r")
}
show() {
Menu, % this.menuName, Show
}
}