我想设置一个AutoHotkey系统,该系统使用尽可能少的密钥来访问许多(例如100个)密钥组合
初学者: Here is one good example of how to do the more basic command。 Another good method is mentioned here,我希望将这两者结合起来并扩展到更全面的系统中。
澄清这个问题:我有3个键:a,b和c。什么是从这3个键获得最多使用的好方法?
为了简单起见,这里有3个方法,只使用我想到的3个键:
第二部分是如何编程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
这只是一个例子,我可以想到如何做到这一点。我认为这种方法有几个原因很糟糕,所以如果有人有一个可以轻松扩展的更好的系统,那就太棒了!
答案 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被视为“修饰符”