![使用 Autohotkey 将 Ctrl 重新绑定到 Capslock 时出现问题](https://linux22.com/image/1245443/%E4%BD%BF%E7%94%A8%20Autohotkey%20%E5%B0%86%20Ctrl%20%E9%87%8D%E6%96%B0%E7%BB%91%E5%AE%9A%E5%88%B0%20Capslock%20%E6%97%B6%E5%87%BA%E7%8E%B0%E9%97%AE%E9%A2%98.png)
我正在使用 AutoHotkey 将 Ctrl 重新绑定到 Capslock,如下所示:
Capslock::Ctrl
我还绑定了主键,以便在按住 Capslock 时移动:
^h::Send {LEFT}
^j::Send {DOWN}
^k::Send {UP}
^l::Send {RIGHT}
问题是,我可以按住 Capslock 并发出一移动组合键,但随后在按住 Capslock 的同时点击 h、j、k 或 l 会导致其中一个字母出现在我的编辑器中。换句话说,就好像 Capslock 被释放了一样,尽管我仍按住它。如果我按住实际的 Ctrl 键并使用移动绑定,它就可以正常工作。有人知道如何纠正这个问题吗?
答案1
这解决方案由“VxE”在 AutoHotKey 论坛上发布:
Capslock::
Gui, 93:+Owner ; prevent display of taskbar button
Gui, 93:Show, y-99999 NA, Enable nav-hotkeys: hjkl
Send {LCtrl Down}
KeyWait, Capslock ; wait until the Capslock button is released
Gui, 93:Cancel
Send, {LCtrl Up}
Return
#IfWinExist, Enable nav-hotkeys: hjkl
*h::Send {Blind}{LCtrl Up}{Left}{LCtrl Down}
*j::Send {Blind}{LCtrl Up}{Down}{LCtrl Down}
*k::Send {Blind}{LCtrl Up}{Up}{LCtrl Down}
*l::Send {Blind}{LCtrl Up}{Right}{LCtrl Down}
#IfWinExist, ; end context-sensitive block
答案2
我认为这是因为 PC 将 Capslock 视为 TOGGLE 键。按下 Caps 键会改变状态,再次按下后状态会恢复。其他非锁定键只要按下一次就会继续发送信号。
答案3
也许你可以尝试扫描码映射方法这。