Autohotkey 特定键和任何其他键的组合
我想把F15变成一个宏键。按住F15的同时按另一个键应调用一个函数,该函数将读取Autohotkey 特定键和任何其他键的组合,autohotkey,Autohotkey,我想把F15变成一个宏键。按住F15的同时按另一个键应调用一个函数,该函数将读取.ini文件以获取说明 我知道我可以这样做,但我不希望有这么大的列表: DoMacro(key) { ... } F15 & a::DoMacro('a') F15 & b::DoMacro('b') F15 & c::DoMacro('c') . . . 我试着摆弄输入,但我想不出任何方法来捕获(甚至传递)非字符键。除了长长的列表,还有其他选择吗?不幸的是,在AHK中没有100%好的方法
.ini
文件以获取说明
我知道我可以这样做,但我不希望有这么大的列表:
DoMacro(key) { ... }
F15 & a::DoMacro('a')
F15 & b::DoMacro('b')
F15 & c::DoMacro('c')
.
.
.
我试着摆弄
输入
,但我想不出任何方法来捕获(甚至传递)非字符键。除了长长的列表,还有其他选择吗?不幸的是,在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),这样在您等待太长时间时不会触发输入。因此,如果更改热键,则必须相应地更改输入列表 为什么您需要
Input
来使用非字符键?因为我想将宏绑定到其他键,例如箭头键。使用Input,SingleKey,L1,{Left}{Right}{Up}{Down}
也很容易捕获这些键,您可以将任何键添加到该列表中。例如,如果按下F15
+Down
,ErrorLevel
将包含EndKey:Down
(不确定是否使用小写/大写)。您可以在中进行检查。您还可以使用热键
命令+ASCII循环动态创建它们。