使用AutoHotKey更换键位

缘起

因为使用emcas的关系,所以 CapsLock 是一定要替换掉的。的确,这个键的使用率其实超级低,对于我来讲基本是不用的,换掉也是早晚的事。

最简单的方法是修改注册表,或者使用类似原理的工具。

根据Xah Lee的方法,也是很多人推荐的方法,是使用AutoHotKey,因为除了更换键位外,还可以自定义一些其它功能。Windows: Swap CapsLock Alt Ctrl Keys

但是不知道为什么我用这个方法就是不行,原理非常简单 Capslock::Ctrl 就这么一行,但是在我这里就是各种不成功,而且在按下的同时还会出现,第一次这按了 CapsLock-c 后复制成功了,但同时 CapsLock 状态也启动了的问题。

最后在相当长的历史时间内,我是使用了一个叫 “keytweak”的软件,根本原理也是修改注册表,提供了一个图形化界面。配合着Autohotkey自定义了一些组合键使用。

但是有一天,由于某种原因更新了一个杀毒软件之后,突然不能用了,经检查是似乎这个软件为默认把修改键位的注册表项清空。

因此由回到了AutoHotKey

但是这次很奇怪,也可能是升级了AutoHotKey的关系,1.1.30.00版,之前遇到的问题没有了,可以基本正常使用了。说基本是因为还有一些缺陷:

  1. 如果按了 CapsLock 后,突然又不想按下那个 c 了,这时把手指抬起来后,大写状态就打开了,而且可能还没意识到。
  2. 我定义了 Ctrl-; 和"backspace"的相同的,如果在中文输入法状态下,如果要输入“今天”这两个字,在完成“今”后,在输入“tie”的时候发现应该是输入“a”而不是“e”的话,此时要“backspace”,如果使用 Ctrl-; 因为我实际按的是 CapsLock-; 在按下 CapsLock 的瞬间,输入法会切换成英文,把输入到了一半的拼音全部作废。然后此时再按下“j”,删除的不是那个“e”,而是前一个汉字“今”。

一直没有想到好的办法,直到今天突然看到了这么一个命令: SetCapsLockState,AlwaysOff 从字面上就可以理解,这个命令是永远关掉了这个键的功能。

实验后完成符合要求,一切完美了。

海上一民工