1305 字
7 分钟
使用 AHK 来实现多语言输入法快捷切换
为何抛弃 Windows 原生切换?
Windows 默认的输入法切换键位在超过两种语言时,切换效率会变得极其低下。俺是有三种语言的输入需求,使用默认的切换键位痛苦不已。便借助 AutoHotKey 实现了使用键盘上多余的键位来进行输入法切换的功能。从“轮询切换”变为“确定性切换”。
个人的解决方法
俺的键盘是 108 键的,它自带了 4 个多媒体按键。这几个按键对于我来说是低频按键,因此我选择它们作为我的语言切换按键。俺使用了 AutoHotKey 将这几个键位映射为了不同输入法的切换键。
俺的映射如下:
| 按键 | 切换到 |
|---|---|
静音 | 英文输入 |
音量 - | 中文输入 |
音量 + | 日语输入 |
实现逻辑
使用 PostMessage 函数,直接伪装成系统,向窗口发送一条切换输入语言的消息。并在参数里面附带目标语言的 LCID。这样就可以做到确定性的切换。
具体代码如下。
#Requires AutoHotkey v2.0
; 强制只运行一个脚本实例。; 如果脚本已经在运行,再次启动会自动替换旧实例,方便修改代码后直接生效。#SingleInstance Force
; --- 键位映射区域 ---; 逻辑:拦截媒体键 -> 调用切换函数 -> 传入对应的语言 ID (LCID); 注意:这些键的原始媒体功能(静音/调节音量)将被完全覆盖。
Volume_Mute::SwitchToLang(0x0409) ; 0x0409 = 英语 (美国)Volume_Down::SwitchToLang(0x0804) ; 0x0804 = 中文 (中国大陆)Volume_Up::SwitchToLang(0x0411) ; 0x0411 = 日语
; --- 核心功能函数 ---SwitchToLang(LangID) { ; PostMessage: 将消息放入目标窗口的消息队列中(不等待结果直接返回,速度快) ; 参数详解: ; 1. 0x50 : 消息代码 WM_INPUTLANGCHANGEREQUEST (请求切换输入语言) ; 2. 0 : wParam (系统标志位),0 表示使用默认行为 ; 3. LangID : lParam (语言标识符),即上面传入的 0x0409 等 ; 4. (空) : Control (控件名),此处留空因为是对整个窗口发送 ; 5. "A" : 当前活动窗口
PostMessage(0x50, 0, LangID,, "A")}常用的 LCID 参考如下
可以根据自己的需求替换其中的 LCID。
| 语言/布局 | LCID |
|---|---|
| 中文 (简体) | 0x0804 |
| 英文 (美国) | 0x0409 |
| 日文 | 0x0411 |
| 韩文 | 0x0412 |
| 中文 (繁体 - 台湾) | 0x0404 |
| 中文 (繁体 - 香港) | 0x0C04 |
适用范围 & 局限
这个方法切的是“语言/键盘布局”,所以在下面这种情况下体验最好:
- ✅ 适合:一个语言对应一个输入法的情况(例如:中文只有微软拼音、日语只有微软日语、英文只有美式键盘)
- ❌ 不太适合:同一种语言下有多个输入法的情况(例如:中文有小狼毫、微软拼音两种输入法。然后你想指定切换到小狼毫的话,这个方法就不太适合)
如果是上面第二种情况的话,通常需要用 HKL 去定位到具体的输入法。我没有遇到这个需求,所以也不展开讲了。
如何找“按键名称”方便自己该映射?
用 AHK 自带的 Key history and script info。
- 先运行上面的脚本(或者随便一个 AHK 的脚本)
- 在任务栏中找到 AHK 图标
- 右键选择
Open或Help(不同版本可能有差异) - 然后在打开的界面顶部选择
View - 选择其中的
Key history and script info - 然后按下你想绑定的按键,再刷新页面(默认是 F5)。就能看到界面日志里面对应的名称。
知道名称之后,你就可以修改上面的代码(像下面这样):
YourKeyName::SwitchToLang(0x0409)如何设置开机自启动?
下面有两种方式。一种是直接放入启动文件夹。另一种是利用任务计划程序。
方式 1:放入启动文件夹
Win + R- 弹出的窗口输入
shell:startup - 把
.ahk脚本快捷方式丢进去就行
这个方法非常简单。但在有些程序的窗口下,可能需要管理员权限才能够使用 AHK 脚本。
方式 2:任务计划程序
如果你发现有些软件或窗口无法使用这个脚本,可能需要以管理员权限运行 AHK 脚本。
大致思路:
- 直接用 Windows 自带的搜索,搜「任务计划程序」。然后打开它
- 选择 创建任务,不要选择 创建基本任务
- 名称随便取
- 在「常规」页中找到「安全选项」,勾选其中的「只在用户登录时运行」,勾选「使用最高权限运行」
- 将界面切到「操作」页,选择「新建」,将你的 AHK 脚本路径填进去
PS:「常规」页中有一个「隐藏」的选项。如果勾选这个选项的话,启动是不会弹那个需要手动确认管理员权限的窗口。
可能的风险
AHK 这类工具在某些游戏环境里可能会被反作弊系统判定为作弊程序。如果你游玩的游戏反作弊比较激进,建议不要使用 AHK 脚本或在游戏时退出 AHK 程序。
使用 AHK 来实现多语言输入法快捷切换
/posts/20260118_使用-ahk-来实现多语言输入法快捷切换/ 部分信息可能已经过时