Caps Lock和Left Ctrl交换后,每次按过Caps Lock后,还是会大写锁定?

例如,按下 Caps Lock - x - f 后,再按字母都是大写的,有什么办法解决不?

谢谢!

操作系统: Windows 7 Pro

交换Caps Lock和 Left Ctrl的方法是通过修改注册表实现的,如下:

Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout] “Scancode Map”=hex:00,00,00,00,00,00,00,00,04,00,00,00,3A,00,1D,00,1D,00,3A,00,38,00,38,e0,00,00,00,00

不会呀?没有遇到过。不过我是Caps Lock和ESC交换的。

我在交换后,按下 Caps Lock,那个灯还回亮,而且后面再按字母,全部都是大写的。

注册表修改之后可能需要注销用户之后新的键位才能生效。

PS: Windows 下我推荐用一个 MapKeyboard 的程序修改键位。

我修改注册表后,已经重启机器了。还是不行。

用autohotkey吧,绿色软件,几行代码就搞定了

autohotkey确实能解决问题。

但是不明白为何修改了注册表,caps lock按下后还会大写锁定?

http://jixiuf.github.io/assets/blog/000011-windows-keymap.html/windows-keymap2.JPG

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,3a,00,1d,00,1d,00,3a,00,00,00,00,00

试了jixiuf的方法,问题依旧存在。修改后的注册表内容如下,

感觉是因为key code的意思是,短按仍识别为 Caps Lock,长按才是 Ctrl。

只要当前大写锁定未生效,那么无论长按或者短按,大写锁定都生效。当然长按时,给人的感觉是先扮演 Ctrl,再扮演 Caps Lock。

那么可能是键盘固件的问题…… 可能你的键盘 Caps Lock 是直接由键盘处理的,不接受系统级别的按键更改

但是使用类似autohotkey的话可以正确的做映射。键盘固件只负责上报键码,不会直接处理的。

我的键盘也不特殊,型号是 Dell keyboard KB212-B.

难道@LdBeth那边通过直接修改注册表,不会出现我提到的问题?

我好久没用 Windows了。 macOS 可以在设置里面直接改。 我用的也是可编程的外接键盘,固件不一样 Caps 行为也有区别。(年轻人不要碰外设) 也不见得一定是键盘固件的问题,可能是中间某一层的问题。 既然能用 ahk 解决,最好不过

很有可能是虚拟机引入的。现在我是通过Linux云端进入Windows虚拟机,可能是 Linux 将 Caps Lock 的key code 和 key symbol 同时发送给了 Windows 虚拟机,导致在 Windows 虚拟机上按 Caps Lock 时,同时上演 Caps Lock 和 Ctrl。 而 Autohotkey 在较高的层次在做按键映射,所以会把 Caps Lock 的 key code 和 key symbol 都映射成 Ctrl,故而避开了上面提到的问题。

2 个赞

用了AutoHotKey后,还发现一个问题,Caps Lock - Alt - s 没有反应,本来应该是 Regexp I-search

AHK的script如下, Capslock::Control ; make Caps Lock the control button

这个问题和所选用的键盘有关。经过AutoHotKey将 Caps Lock 映射成 Ctrl 后, 不同的键盘对不同的按键组合反应不同。比如,

这个估计就是固件的锅了。

这么看起来,玩 emacs 的成本比 vi 要高啊,首先得有个全键无冲的键盘:cry:

别再修改注册的表了, 这里有微软官方的工具

2 个赞