输入法切换过程造成的麻烦和一种解决途径

摘要:如厕时又解决关键问题,真有我的。

问题

Windows系统的输入法切换历来都很变态,到了Windows10这一代,这种变态更加变本加厉:有太多的开关控制着你是否能够输入中文,例如:

  1. 系统输入法语言是英文时,不能输入中文(Win+Space可切换为中文语言)
  2. 系统输入法语言是中文时,如果输入法处于关闭状态,不能输入中文(Ctrl+Space切换输入法开关)
  3. 系统输入法语言是中文时,输入法也处于开启状态,但输入法本身处于英语状态,不能输入中文(用shift切换中英文)

这样当你想输入中文,却发现敲出来的字是英文时,要耗费心思(那怕只是很少的心思)去排查上面三处开关。这在大量码字时中烦不胜烦。

而理想状态是

而其实更优秀的切换输入法的方式是,按下一个按钮“M”,无论如何敲出来的都是中文;按下另外一个按钮“N”,无论如何敲出来的都是英文。这种方式给你盲操作的空间,可惜微软从来没想过这样做。

一种解决途径

刚才蹲厕的时候突然想到了解决这个问题的办法:使用IMEtool和AHK脚本可以实现上述切换输入法的方式,方法很简单,思路很巧妙:

  1. 使用IMEtool指定英文语言和中文语言单独的快捷键(英文快捷键“X”和中文快捷键“Y”)
  2. 当按下快捷键“M”时,AHK脚本被激发,它模拟键盘按下了快捷键“X”后再按下快捷键“Y”
  3. 当按下快捷键“N”时,AHK脚本被激发,它模拟键盘按下了快捷键“X”

为什么它能够解决问题

为什么用“M”激发“Y”之前要先执行“X”?这一步可以关闭现有的可能存在②③类错误的中文输入法(解决了问题②③)。之后为什么还要按“Y”?它帮助你从任意输入法切换回中文输入法(解决了问题①)。

AHK帮助你完成的操作看似简单,但是能够从上文①②③任意输入法状态转换为绝对的英文输入和绝对的汉字输入。

「哔一声之后」

功能实现了,剩下的就是对这个过程做一些优化:

  1. AHK切换到中文输入法时,发出高频率(1000)的300毫秒“滴”声 (SoundBeep,1000,300)
  2. AHK切换到英文输入法时,发出低频率(500)的300毫秒“滴”声 (SoundBeep, 500,300)

这样纯粹靠耳朵也能辨识输入法状态了。

实操部分

具体实现过程:

  1. 选个不常用的快捷键绑定中英输入法(Ctrl Alt 9)(Ctrl Alt 0)
  2. 使用毫无用处的大写字母锁键作为「一键中文输入法」键
  3. 使用Ctrl+Caplock键作为「一键英文输入法」键
  4. AHK脚本只需要短短9行:

    Caplock::
        send ^!9
        send ^!0
        SoundBeep, 2000, 100
        Return
    ^Caplock::
        send ^!9
        SoundBeep, 500, 100
        Return