我想将 F15 转换为宏键。在按住F15的同时按另一个键应调用一个函数,该函数将读取.ini
文件以获取指示。
我知道我可以这样做,但我不想拥有巨大的名单:
DoMacro(key) { ... }
F15 & a::DoMacro('a')
F15 & b::DoMacro('b')
F15 & c::DoMacro('c')
.
.
.
我尝试用Input
摆弄,但我无法找出任何捕获(甚至传递)非字符键的方法。这个长名单还有其他选择吗?
答案 0 :(得分:1)
不幸的是,在AHK中没有100%的好方法可以做到这一点(除非你知道通过API调用的方法,但我不这样做。)
我认为你能从这种情况中做出的最好的就是:
GetAnyKey(timeout) {
Input, PressedKey, T%timeout% L1, {F1}{F2}{F3}{F4}{F5}{F6}{F7}{F8}{F9}{F10}{F11}{F12}{F14}{F15}{F16}{F17}{F18}{F19}{F20}{F21}{F22}{F23}{F24}{PrintScreen}{Del}{Home}{End}{PgUp}{PgDn}{ScrollLock}{Pause}{Ins}{BS}{Space}{Left}{Right}{Up}{Down}{Left}{Right}{NumLock}{NumPad1}{NumPad2}{NumPad3}{NumPad4}{NumPad5}{NumPad6}{NumPad7}{NumPad8}{NumPad9}{NumPad0}{NumPadAdd}{NumPadSub}{NumPadMult}{NumPadDiv}{NumPadEnter}{NumPadDot}{NumPadEnd}{NumPadHome}{NumPadPgDn}{NumPadPgUp}{NumpadClear}{NumpadDown}{NumpadIns}{NumpadLeft}{NumpadRight}{AppsKey}{LShift}{RShift}{LCtrl}{RCtrl}{LAlt}{RAlt}{LWin}{RWin}
If (ErrorLevel = "Timeout")
Return
If PressedKey
Key := PressedKey
Else
Key := SubStr(ErrorLevel,8)
Return Key
}
F13::
Key := GetAnyKey(1)
If (Key && GetKeyState("F13", "P")) {
DoMacro(Key)
}
Return
DoMacro(Key) {
MsgBox, F13 and %Key% have been pressed!
}
我从输入键列表中删除了热键(F13),以便在等待时间过长时不会触发输入。
因此,如果您更改热键,则必须相应地更改输入列表。