如果仅按下一个键,如何触发动作?

如果仅按下一个键,如何触发动作?

这是我当前的脚本:

Shift::Send ^{Space}

它不仅在单独^{Space}按下时触发Shift,还会在按下Alt+ Shift(只需这两个键)和Ctrl+ Shift只需这两个键如果Shift是最后发布的,有没有办法^{Space}触发Shift仅有的是否按下了某个键?

AutoHotkey 版本:1.1.33.09。

答案1

对原始帖子添加的澄清很有帮助。

Shift 不像普通的热键,因此按键的顺序很重要。例如,按Ctrl+Shift不一定触发与按Shift+相同的热键Ctrl

另外仅供参考,热键定义在键盘弹起事件上触发,除非您有单独的“键盘弹起”热键定义(例如,如果Shift Up::添加到脚本中,则原始Shift::代码现在会在键盘弹起事件上触发Shift Down,而以前它会在键盘弹起事件上触发Shift Up

无论如何,如果您~在热键定义前面放置波浪符号 ( ),它将执行您的代码,但不会阻止按键操作,因此对于Shift您不想触发的任何特殊组合,您可以尝试关闭热键然后再打开。当堆叠多个热键定义时,它会对其中任何一个执行底部的相同代码,直到 Return 语句...

~+LControl::
~+RControl::
~+LAlt::
~+RAlt::
~Shift & Alt::
~Shift & Control::
~^Shift::
~!Shift::
    Tooltip % "A_ThisHotkey=" A_ThisHotkey
    Hotkey, Shift, Off
    KeyWait, Shift
    Hotkey, Shift, On
    
    Sleep 100   ; comment this out if not debugging
    ToolTip
Return

Shift::MsgBox

我从上面的调试代码开始,但我认为只要为您不想触发的用例定义了热键,它甚至不需要执行任何东西……即,这似乎也能正常工作......

~+LControl::
~+RControl::
~+LAlt::
~+RAlt::
~Shift & Alt::
~Shift & Control::
~^Shift::
~!Shift::
Return

Shift::MsgBox

但是,如果您想查看不同按键顺序之间的行为差​​异,请忽略前几个热键定义并运行下面的代码,它将向您展示按下Ctrl+ShiftShift+时产生的差异Ctrl

如果没有其他热键定义,这表明它允许您区分键顺序,这实际上允许您拥有一个不会在+上触发的Ctrl+热键(即,它是一个“功能”,而不是一个错误)ShiftShiftCtrl

~^Shift::
~!Shift::
    Tooltip % "A_ThisHotkey=" A_ThisHotkey
    Hotkey, Shift, Off
    KeyWait, Shift
    Hotkey, Shift, On
    
    Sleep 100   ; comment this out if not debugging
    ToolTip
Return

Shift::MsgBox

相关内容