跳到内容
返回

在 Windows 上优雅地切换输入法

输入法涉及隐私,因此用搜狗输入法、微信输入法之类的产品,这是绝对不可能的。再者,谁也不愿意电脑里莫名出现弹窗广告。

以下所有内容都基于 Windows 环境。

微软拼音

很多输入法都支持通过 Shift 切换中英文模式,我也已经适应这种方式。但如果用到 Blender 等软件就会发现 Shift 也可以作为快捷键的修饰键;如此极易导致误触切换,打断操作。

一个解决方案是添加英文键盘。因为我电脑上显示语言设的就是 English (United States),强制添加了 US 键盘。但同时微软拼音输入法本身附带英文模式,即:

默认通过 Win + Space 切换键盘,而微软拼音输入法内部可以设置 Shift / Ctrl + Space / Ctrl 切换中英文模式。

既然已经有了两种键盘,理想情况下我希望它们分别对应中英文输入,同时微软拼音输入法始终保持中文模式。但这样带来两个问题:Win + Space 的快捷键无法更改,需要调整操作习惯;微软拼音输入法在特定情况下自动切换到英文模式,来回切换键盘才发现问题。

macOS 上 Caps Lock 默认切换输入法,长按才会真正切换大写锁定。考虑到自己几乎不用 Caps Lock,这一点可以借鉴。同时习惯上从 Shift 改到 Caps Lock 也没有那么困难。

于是写了一个 AutoHotkey 脚本,用 Caps Lock 切换键盘,同时每隔 500 毫秒将微软拼音输入法切换到中文模式。

CapsLock::Send "{LWin Down}{Space}{LWin Up}"
IsChinese(hWnd) {
    ThreadID := DllCall("GetWindowThreadProcessId", "UInt", hWnd, "UInt", 0)
    IMEStatus := DllCall("GetKeyboardLayout", "int", ThreadID, "UInt")
    return (IMEStatus & 0xffff) = 0x804
}
SwitchIMEState(id) {
    SendMessage(0x283, 0x002, 1025, , id)
}
outer:
Loop {
    try {
        hWnd := WinGetID("A")
        id := DllCall("imm32\ImmGetDefaultIMEWnd", "Uint", hWnd, "Uint")
        if IsChinese(hWnd) {
            SwitchIMEState(id)
        }
    } catch as e {
        continue("outer")
    }
    Sleep 500
}

后来微软强推 Bing,在输入法加入了基于 Bing 的输入建议,按下 Tab 就会出现(即使该功能没有启用)。考虑微软在 Edge 里增加的种种冗余功能,还是觉得此地不宜久留。况且也不能对微软的隐私保护予以过度信任。

Rime

后来切换到 Rime。开源,隐私方面可以信任。很简洁。

词库用的是 雾凇拼音。自己稍微配置一下就行。Rime 似乎不会乱跳中英文模式,这一点就无须额外设计。

default.custom.yaml

patch:
  schema_list:
    - { schema: rime_ice }
  "ascii_composer/switch_key/Shift_L": noop
  "ascii_composer/switch_key/Shift_R": noop
  "menu/page_size": 7

weasel.custom.yaml

patch:
  "style/horizontal": true
  "style/font_point": 12

这里贴一段模仿 macOS 行为的 AuthHotkey 脚本,短按切换输入法,长按切换大写锁定:

*CapsLock:: {
    local startTime := A_TickCount
    KeyWait "CapsLock"
    local pressDuration := A_TickCount - startTime
    if (pressDuration < 500)
    {
        Send "{LWin Down}{Space}{LWin Up}"
    }
    else
    {
        SetCapsLockState !GetKeyState("CapsLock", "T")
    }
}

就先这样吧,之后有什么问题再折腾。


分享文章:

上一篇
2026 浦东一模 21
下一篇
2026 虹口一模 21