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

时间:2014-08-20 21:19:07

标签: autohotkey

我想将 F15 转换为宏键。在按住F15的同时按另一个键应调用一个函数,该函数将读取.ini文件以获取指示。

我知道我可以这样做,但我不想拥有巨大的名单:

DoMacro(key) { ... }

F15 & a::DoMacro('a')
F15 & b::DoMacro('b')
F15 & c::DoMacro('c')
.
.
.

我尝试用Input摆弄,但我无法找出任何捕获(甚至传递)非字符键的方法。这个长名单还有其他选择吗?

1 个答案:

答案 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),以便在等待时间过长时不会触发输入。
因此,如果您更改热键,则必须相应地更改输入列表。