AutoHotkey - 使用有限的键集最大化键盘kombinations的数量

时间:2014-08-19 14:53:21

标签: keyboard-shortcuts autohotkey hotkeys

我想设置一个AutoHotkey系统,该系统使用尽可能少的密钥来访问许多(例如100个)密钥组合

初学者: Here is one good example of how to do the more basic commandAnother good method is mentioned here,我希望将这两者结合起来并扩展到更全面的系统中。

澄清这个问题:我有3个键:a,b和c。什么是从这3个键获得最多使用的好方法?

为了简单起见,这里有3个方法,只使用我想到的3个键:

  • 按住所有3秒1秒并释放=“MsgBox你按A,B,C一秒钟然后发布”
  • 同时点击所有3次=“你点击A,B,C两次的MsgBox”
  • 按住所有3秒3秒并释放=“MsgBox你按A,B,C三秒钟并释放”

第二部分是如何编程AutoHotkey来执行此操作,而不会在以后添加第四个密钥等时发生冲突。

之前尝试过这种方法的一种方法是使用keystate,使用双击时应该直截了当。以下是我正在使用的工作:

CapsLock & a:: ; a hotkey to send a message when you click a two times while 
               ; holding down CapsLock, left Shift, and left Control
GetKeyState, stateLCtrl,    LCtrl
GetKeyState, stateLShift,   LShift
    if stateLCtrl=D
        if stateLShift=D
            if (A_PriorHotkey <> "CapsLock & a" or A_TimeSincePriorHotkey > 500)
            {
                ; Too much time between presses, so this isn't a double-press.
                KeyWait, Esc
                return ; does nothing on single click 
            }
            MsgBox you clicked a two times while holding down 
                   CapsLock, left Shift, and left Control ;output of hotkey 
            return 
        else                
            Return
    else 
        return 
return 

这只是一个例子,我可以想到如何做到这一点。我认为这种方法有几个原因很糟糕,所以如果有人有一个可以轻松扩展的更好的系统,那就太棒了!

1 个答案:

答案 0 :(得分:3)

我建议您查看#If context。这允许您指定所需的关键状态,而无需复制大量“状态检查”代码。以下是使用此上下文时脚本的外观。

#If GetKeyState("Shift") and GetKeyState("Ctrl") and GetKeyState("CapsLock")
    *a:: 
        Keywait % A_ThisHotkey
        if (A_PriorHotkey = A_ThisHotkey and A_TimeSincePriorHotkey < 500)
            msgbox, short
        else
            return ; too long
    return
#If 
  • 如果脚本中有通用热键,则使用'#If'关闭上下文

  • 热键上需要
  • '*',因为Ctrl和Shift被视为“修饰符”