![Autohotkey capslock 重新映射并用作修饰符](https://linux22.com/image/1612863/Autohotkey%20capslock%20%E9%87%8D%E6%96%B0%E6%98%A0%E5%B0%84%E5%B9%B6%E7%94%A8%E4%BD%9C%E4%BF%AE%E9%A5%B0%E7%AC%A6.png)
设置以下脚本:
#persistent
SetCapsLockState, AlwaysOff
CapsLock::Esc
Capslock & j::Send {Blind}{Down DownTemp}
Capslock & j up::Send {Blind}{Down Up}
我遇到了一个问题,如果我单击Shift-Caps-j
,或者只是Shift-Esc
,它将激活大写字母(而不是突出显示下一行)。
我不明白为什么这个问题没有发生这里. 有什么想法或解决办法吗?
答案1
默认情况下,AutoHotKey 仅在按下该组合键时才启用热键,不允许变化。要实现“选择以下一行”效果,您应该使用*
通配符修饰符,这样即使按下了额外的键,热键也可以工作,如下所示:
#persistent
SetCapsLockState, AlwaysOff
*CapsLock::Esc
*Capslock & j::Send {Blind}{Down DownTemp}
*Capslock & j up::Send {Blind}{Down Up}
在这里阅读更多内容:https://www.autohotkey.com/docs/Hotkeys.htm#wildcard
此外,如果您想在多个热键上使用修饰键(例如在您的情况下为 CapsLock),我建议将环境#If
与GetKeyState
命令结合起来,就像您在我的脚本中看到的那样,我使用它在按下按钮时将某些键变成箭头,还有更多附加功能。
https://gist.github.com/Isti115/0b657e7d0a50c96dd3806e86951f5421
编辑:嗯,看来组合键不需要星号。文档:https://www.autohotkey.com/docs/Hotkeys.htm#combo_mods这么说吧Unlike a normal hotkey, custom combinations act as though they have the wildcard (*) modifier by default.
,但是在这种情况下我不明白为什么你的版本不起作用。
答案2
如果其他人偶然发现这个问题,这里还有另一种方法可以防止所有意外的 Caps Lock 切换:
SetCapsLockState, AlwaysOff
#If GetKeyState("CapsLock", "P")
h::Left
j::Down
k::Up
l::Right
#If
*CapsLock::
KeyWait, CapsLock
IF A_ThisHotkey = *CapsLock
Send, {Escape}
Return
图片来源:Rohwedder:https://www.autohotkey.com/boards/viewtopic.php?t=70880