Autohotkey 特定键和任何其他键的组合

Autohotkey 特定键和任何其他键的组合,autohotkey,Autohotkey,我想把F15变成一个宏键。按住F15的同时按另一个键应调用一个函数,该函数将读取.ini文件以获取说明 我知道我可以这样做,但我不希望有这么大的列表: DoMacro(key) { ... } F15 & a::DoMacro('a') F15 & b::DoMacro('b') F15 & c::DoMacro('c') . . . 我试着摆弄输入,但我想不出任何方法来捕获(甚至传递)非字符键。除了长长的列表,还有其他选择吗?不幸的是,在AHK中没有100%好的方法

我想把F15变成一个宏键。按住F15的同时按另一个键应调用一个函数,该函数将读取
.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循环动态创建它们。