问题
当按下3键热键(LShift
+ CapsLock
+ LButton
)时,类似的2键热键(CapsLock
+ LButton
)是触发了。
问题
为什么会这样?
如何为shift left click
+ LShift
+ CapsLock
热键触发正确的消息框(LButton
)?
代码
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
热键触发< / LI>
if
,else if
和&amp; else
陈述
而不是#If
指令来改变3键的顺序
热键$
修改器阻止3键热键触发CapsLock
+ LButton
热键将3键热键分成几部分,例如,将一个2键热键放在#If
GetKeyState
内,即:
#If GetKeyState("LShift", "P")
CapsLock & LButton::
MsgBox, "shift left click"
return
#If
这通常会提供正确的消息(shift left click
)框,但有时会触发CapsLock热键,提供错误的消息框(capslock
)
答案 0 :(得分:2)
您可以测试双键热键内的移位,以实现CapsLock + LButton
和CapsLock + Shift + LButton
:
SetCapsLockState, AlwaysOff
CapsLock::
MsgBox, "capslock"
return
CapsLock & LButton::
if (GetKeyState("LShift", "P")) {
MsgBox, "shift left click"
}
else {
MsgBox, "left click"
}
return
避免类似热键的代码重复:
使用function
CapsLock & RButton::CapsMouseHandler("right")
CapsLock & LButton::CapsMouseHandler("left")
CapsMouseHandler(btnString) {
if (GetKeyState("LShift", "P")) {
MsgBox % "shift " btnString " click"
}
else {
MsgBox % btnString " click"
}
}
CapsLock & RButton::
CapsLock & LButton::
btnString := InStr(A_ThisHotkey, "LButton") ? "left" : "right"
if (GetKeyState("LShift", "P")) {
MsgBox % "shift " btnString " click"
}
else {
MsgBox % btnString " click"
}
return