一个常驻系统托盘的 Windows 小工具,自动把输入法切回英文,并在敲键盘时隐藏鼠标。
-
切窗口时自动切英文 焦点切到任何窗口后稍作延迟再检测当前输入法状态,然后:
- 已经是英文 → 不动
- 中文输入法 (微软拼音 / 搜狗 / 五笔等) → 仅切到英文模式 (中/英 切换),保留中文输入法,不强切到英文键盘布局
- 其他非英文 (日 / 韩等) → 切到英文 (en-US) 键盘布局
- TSF 类输入法 (现代微软拼音、搜狗) 不响应
WM_IME_CONTROL时,自动模拟一次 Shift 按键作为兜底切换
-
Chrome / Edge 等浏览器地址栏获焦立刻切英文 通过 UI Automation 监听焦点变化。在浏览器地址栏 (omnibox) 获焦时立即切换,但不会误触发于网页内的
<input>/<textarea>(通过判断父链上是否有 Document 元素过滤)。 支持: chrome / msedge / brave / vivaldi / opera / thorium -
敲键盘时隐藏鼠标 全局低级键盘 / 鼠标钩子。
- 任何按键按下 → 立即把系统光标替换为透明位图 (覆盖箭头 / I 形 / 等待 / 调整大小 / 手型 等 14 种标准光标)
- 停止敲击超过 2 秒 → 自动恢复
- 鼠标移动 (排除程序合成的注入事件) → 立即恢复
- 边敲边动鼠标 (500ms 内) 不会触发隐藏,避免闪烁
-
开机自启动 通过
HKCU\Software\Microsoft\Windows\CurrentVersion\Run注册表项实现,无需管理员权限。 -
托盘菜单
- 切焦点时切英文 (开/关)
- 敲键盘时隐藏鼠标 (开/关)
- 开机自启动 (开/关)
- Exit
打开 https://dotnet.microsoft.com/download/dotnet/9.0,在 ".NET Desktop Runtime 9.0.x" 一栏下载 Windows x64 版本并安装。
到本仓库的 Releases 页面下载 ImeToEnglish-vX.Y.Z-win-x64.exe,放到一个固定位置 (例如 C:\Tools\ImeToEnglish\)。
双击 ImeToEnglish.exe。任务栏托盘里会出现一个蓝底白字 "EN" 图标。
Win11 默认会折叠新增的托盘图标。点任务栏右下角的
^找到 EN 图标,把它拖到任务栏上让它常驻。
右键托盘图标可以开启/关闭各项功能、设置开机自启动。
- 挪动 exe 位置后,需要在托盘菜单里把 开机自启动 取消再重新勾上,这样注册表里的路径会更新到新位置。
- TSF 输入法的中英切换键默认是
Shift。如果你改过 (例如改成Ctrl+Space),"切焦点时切英文" 在中文 IME 模式下可能不生效 — 提 issue 告诉我你的快捷键。 - 隐藏鼠标用的是
SetSystemCursor,会改写整个系统的光标资源,直到本程序调用SystemParametersInfo(SPI_SETCURSORS)把它们恢复。程序退出 / 崩溃时都会自动恢复 (AppDomain.ProcessExit/UnhandledException兜底)。万一遇到鼠标一直不见,重启资源管理器 (Ctrl+Shift+Esc → 找到 "Windows 资源管理器" → 右键重启) 即可。 - 全局键鼠钩子可能被某些杀毒软件标记。Microsoft Defender 一般不会,但企业终端管理软件会拦。
需要: .NET 9 SDK (或更新)
git clone https://github.com/neilpang/ImeToEnglish.git
cd ImeToEnglish
dotnet publish -c Release -r win-x64 -o publish输出目录 publish/ 里就一个 ImeToEnglish.exe (~230 KB,framework-dependent 单文件,PDB 嵌入),双击即可运行。
| 功能 | 关键 API |
|---|---|
| 切窗口时切英文 | SetWinEventHook(EVENT_SYSTEM_FOREGROUND) + GetKeyboardLayout + WM_IME_CONTROL / WM_INPUTLANGCHANGEREQUEST / SendInput(VK_SHIFT) |
| 浏览器地址栏检测 | System.Windows.Automation.AddAutomationFocusChangedEventHandler + TreeWalker |
| 隐藏鼠标 | SetWindowsHookEx(WH_KEYBOARD_LL / WH_MOUSE_LL) + SetSystemCursor(CreateCursor(...)) |
| 恢复鼠标 | SystemParametersInfo(SPI_SETCURSORS) |
| 开机自启动 | 写注册表 HKCU\...\Run\ImeToEnglish |
整体只有一个 Program.cs,代码不到 600 行。
MIT