【问题标题】:Combination of specific key and any other key特定键和任何其他键的组合
【发布时间】:2023-03-19 21:45:01
【问题描述】:

我想把 F15 变成一个宏键。按住 F15 时按另一个键应该调用一个函数,该函数将读取 .ini 文件以获取指令。

我知道我可以这样,但我宁愿没有庞大的列表:

DoMacro(key) { ... }

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

我尝试摆弄Input,但我想不出任何方法来捕获(甚至通过)非字符键。长长的名单有什么替代品吗?

【问题讨论】:

  • 为什么需要Input来消费非字符键?
  • 因为我想将宏绑定到其他键,例如箭头键。
  • 使用:Input, SingleKey, L1, {Left}{Right}{Up}{Down} 可以很容易地捕获这些键,您可以将任何键添加到该列表中。例如,如果按下F15 + DownErrorLevel 将包含EndKey:Down(不确定是小写还是大写)。您可以在docs 中查看。
  • 您也可以使用Hotkey 命令+“ASCII 循环”动态创建它们。

标签: autohotkey


【解决方案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),这样当您等待太久时它不会触发输入。
因此,如果您更改热键,则必须相应地更改输入列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-09
    • 2017-06-14
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多