问题
Windows系统的输入法切换历来都很变态,到了Windows10这一代,这种变态更加变本加厉:有太多的开关控制着你是否能够输入中文,例如:
- 系统输入法语言是英文时,不能输入中文(Win+Space可切换为中文语言)
- 系统输入法语言是中文时,如果输入法处于关闭状态,不能输入中文(Ctrl+Space切换输入法开关)
- 系统输入法语言是中文时,输入法也处于开启状态,但输入法本身处于英语状态,不能输入中文(用shift切换中英文)
这样当你想输入中文,却发现敲出来的字是英文时,要耗费心思(那怕只是很少的心思)去排查上面三处开关。这在大量码字时中烦不胜烦。
而理想状态是
而其实更优秀的切换输入法的方式是,按下一个按钮“M”,无论如何敲出来的都是中文;按下另外一个按钮“N”,无论如何敲出来的都是英文。这种方式给你盲操作的空间,可惜微软从来没想过这样做。
一种解决途径
刚才蹲厕的时候突然想到了解决这个问题的办法:使用IMEtool和AHK脚本可以实现上述切换输入法的方式,方法很简单,思路很巧妙:
- 使用IMEtool指定英文语言和中文语言单独的快捷键(英文快捷键“X”和中文快捷键“Y”)
- 当按下快捷键“M”时,AHK脚本被激发,它模拟键盘按下了快捷键“X”后再按下快捷键“Y”
- 当按下快捷键“N”时,AHK脚本被激发,它模拟键盘按下了快捷键“X”
为什么它能够解决问题
为什么用“M”激发“Y”之前要先执行“X”?这一步可以关闭现有的可能存在②③类错误的中文输入法(解决了问题②③)。之后为什么还要按“Y”?它帮助你从任意输入法切换回中文输入法(解决了问题①)。
AHK帮助你完成的操作看似简单,但是能够从上文①②③任意输入法状态转换为绝对的英文输入和绝对的汉字输入。
「哔一声之后」
功能实现了,剩下的就是对这个过程做一些优化:
- AHK切换到中文输入法时,发出高频率(1000)的300毫秒“滴”声 (SoundBeep,1000,300)
- AHK切换到英文输入法时,发出低频率(500)的300毫秒“滴”声 (SoundBeep, 500,300)
这样纯粹靠耳朵也能辨识输入法状态了。
实操部分
具体实现过程:
- 选个不常用的快捷键绑定中英输入法(Ctrl Alt 9)(Ctrl Alt 0)
- 使用毫无用处的大写字母锁键作为「一键中文输入法」键
- 使用Ctrl+Caplock键作为「一键英文输入法」键
AHK脚本只需要短短9行:
Caplock:: send ^!9 send ^!0 SoundBeep, 2000, 100 Return ^Caplock:: send ^!9 SoundBeep, 500, 100 Return