Autohotkey capslock 重新映射并用作修饰符

Autohotkey capslock 重新映射并用作修饰符

设置以下脚本:

#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),我建议将环境#IfGetKeyState命令结合起来,就像您在我的脚本中看到的那样,我使用它在按下按钮时将某些键变成箭头,还有更多附加功能。

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

相关内容