【发布时间】:2018-04-01 04:11:52
【问题描述】:
问题
当按下 3 键热键 (LShift+CapsLock+LButton) 时,会触发类似的 2 键热键 (CapsLock+LButton)。
问题
为什么会这样?
如何为
LShift+CapsLock+LButton热键触发正确的消息框 (shift left click)?
代码
SetCapsLockState, AlwaysOff
CapsLock::
MsgBox, "capslock"
return
CapsLock & LButton::
MsgBox, "left click"
return
; 3 key hotkey
; problem here is when LShift+CapsLock+LButton are pressed, the CapsLock+LButton is
; triggered instead
#If GetKeyState("LShift", "P") && GetKeyState("CapsLock", "P")
LButton::
MsgBox, "shift left click"
return
#If
示例场景
- 按
CapsLock,出现正确消息框(capslock) - 按
CapsLock+LButton,出现正确的消息框(left click) - 按
LShift+CapsLock+LButton,出现错误消息框(left click)(应该出现消息框(shift left click)) - 按
CapsLock+LShift+LButton,出现错误消息框(left click)(应该出现消息框(shift left click))
我的尝试
- 查看
#If指令文档,它提到了可能影响按钮组合的超时,但是,以不同的速度按下按钮仍然会导致CapsLock+LButton热键触发 - 使用嵌套的常规
if、else if和else语句 而不是#If指令来改变 3 键的顺序 热键 - 使用
$修饰符防止三键热键触发CapsLock+LButton热键 -
将 3 键热键分解为多个部分,例如,将 2 键热键放在
#IfGetKeyState中,即:#If GetKeyState("LShift", "P") CapsLock & LButton:: MsgBox, "shift left click" return #If这通常会给出正确的消息 (
shift left click) 框,但有时会触发 CapsLock 热键给出不正确的消息框 (capslock)
【问题讨论】:
-
if (GetKeyState("LShift", "P"))在CapsLock & LButton热键中怎么样? -
@JoshBrobst 我试过 (pastebin)
if (GetKeyState("LShift", "P"))在CapsLock & LButton和#If和常规if/else都停止CapsLock & LButton和 3 键热键触发他们的 @ 987654372@ -
哦,我的意思是使用 if 语句的真正部分来实现 3 键热键,like this
-
@JoshBrobst 好主意,比我以前的解决方案更有效且更稳定(当
LShift是触发热键后释放的最后一个键时,例如LShiftdown+CapsLockdown thenCapsLockup+LShiftup 正确不会触发CapsLock热键,但如果 CapsLock 是触发热键后释放的最后一个键,则会触发CapsLock热键) -
@JoshBrobst 你能把你的解决方案作为这个问题的答案,这样它就可以被接受,以便其他有类似问题的人可以更快地找到它?
标签: autohotkey