为何抛弃 Windows 原生切换?
Windows 默认的输入法切换键位在超过两种语言时,切换效率会变得极其低下。俺是有三种语言的输入需求,使用默认的切换键位痛苦不已。便借助 AutoHotKey 实现了使用键盘上多余的键位来进行输入法切换的功能。从“轮询切换”变为“确定性切换”。
个人的解决方法
俺的键盘是 108 键的,它自带了 4 个多媒体按键。这几个按键对于我来说是低频按键,因此我选择它们作为我的语言切换按键。俺使用了 AutoHotKey 将这几个键位映射为了不同输入法的切换键。
俺的映射如下:
| 按键 | 切换到 |
|---|---|
静音 | 英文输入 |
音量 - | 中文输入 |
音量 + | 日语输入 |
实现逻辑
使用 PostMessage 函数,直接伪装成系统,向窗口发送一条切换输入语言的消息。并在参数里面附带目标语言的 LCID。这样就可以做到确定性的切换。
具体代码如下。
| |
常用的 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)。就能看到界面日志里面对应的名称。
知道名称之后,你就可以修改上面的代码(像下面这样):
| |
如何设置开机自启动?
下面有两种方式。一种是直接放入启动文件夹。另一种是利用任务计划程序。
方式 1:放入启动文件夹
Win + R- 弹出的窗口输入
shell:startup - 把
.ahk脚本快捷方式丢进去就行
这个方法非常简单。但在有些程序的窗口下,可能需要管理员权限才能够使用 AHK 脚本。
方式 2:任务计划程序
如果你发现有些软件或窗口无法使用这个脚本,可能需要以管理员权限运行 AHK 脚本。
大致思路:
- 直接用 Windows 自带的搜索,搜「任务计划程序」。然后打开它
- 选择 创建任务,不要选择 创建基本任务
- 名称随便取
- 在「常规」页中找到「安全选项」,勾选其中的「只在用户登录时运行」,勾选「使用最高权限运行」
- 将界面切到「操作」页,选择「新建」,将你的 AHK 脚本路径填进去
PS:「常规」页中有一个「隐藏」的选项。如果勾选这个选项的话,启动是不会弹那个需要手动确认管理员权限的窗口。
可能的风险
AHK 这类工具在某些游戏环境里可能会被反作弊系统判定为作弊程序。如果你游玩的游戏反作弊比较激进,建议不要使用 AHK 脚本或在游戏时退出 AHK 程序。