Windows 下常见的 开源输入法(IME)

1️⃣ Windows 下常见的 开源输入法(IME)

项目 代码仓库/下载页 主要技术栈 许可证 备注
Rime (中州韵) + Weasel https://github.com/rime/weasel (核心库 librime C++ (CMake) + Lua 脚本 BSD‑3 目前最活跃的跨平台方案,Weasel 是官方的 Windows 前端[6]
PIME https://github.com/Doraemon-OS/PIME C++ (TSF) GPL‑3 同样基于 Rime 引擎的 Windows 前端,适合想直接操作 TSF 的开发者
OpenVanilla‑Win32 https://github.com/jrywu/OpenVanilla‑Win32 C / C++ GPL‑3 老牌的跨平台插件框架,Windows 版已经移植到 x86/x64[3]
fcitx‑rime (Windows 版) https://github.com/fcitx/fcitx5-rime C++、Qt GPL‑3 通过 fcitx5 迁移到 Windows(需要自行编译)
ibus‑rime (WSL + GUI) https://github.com/rime/ibus-rime C、Python BSD‑3 主要面向 Linux,但在 WSL+X 环境下也可使用,适合想在 Windows 子系统里跑 Linux IME 的人
其他轻量插件 例如 YuyanIme, Trime(Android)等,源码同样公开,可作参考 -- -- 主要是移动端示例,里边的输入法框架代码可以移植到 Windows TSF

总结:如果你想在 Windows 上快速得到一个可用的开源 IME,Rime + Weasel 是最成熟、文档最完善的选择;如果你更关注 TSF(Text Services Framework) 本身的学习,OpenVanilla‑Win32 和 TSF‑sample‑IME 更适合作为学习/二次开发的基底[4]


2️⃣ 给现有开源 IME 加"加强插件"(例如自定义词库、候选过滤、界面增强)的大体思路

下面分别以 Rime 与 TSF(原生) 为例说明。

2.1 Rime 系统(推荐)

Rime 本身把 输入法核心(librime)和 前端 UI(Weasel/PIME)解耦。插件可以在两层实现:

插件层级 典型实现方式 适用场景 参考文档
Lua 脚本 / Filter schema.yaml 中加入 filter: lua_filter,编写 .lua 处理候选词列表(过滤、排序、加注释等) 只需要对候选进行后处理,不改动 UI librime‑lua 模块文档(仓库 librime-lua
自定义词库/扩展词典 编写 *.txt/*.dict.yaml,放进 rime 目录并在 default.custom.yamlpatch 引入 增加专业术语、行业词汇 Rime 官方 "词典格式"说明
C/C++ 插件(模块) librime/plugins 目录编写 C++ 动态库,实现 RIME_API 接口(如 Processor, Translator, Filter)并在 rime.yamlmodule 引入 需要高性能或调用外部库(机器学习、网络) GitHub librime 插件示例 plugins/[6]
前端 UI 改造 修改 Weasel 源码(C++/Qt)或使用 Weasel 的 插件机制(lua + C++ 改变候选窗外观、添加快捷键、悬浮窗等 Weasel 项目 README(含插件文档)

快速上手示例(Lua 过滤器)

复制代码
-- demo_filter.lua
local filter = {}

function filter.process(cand)
    -- 只保留含有"科技"关键词的候选
    if cand.text:find("科技") then
        return cand
    end
    return nil
end

return filter

schema.yaml 中加入

复制代码
filters:
  - lua_filter@demo_filter

重启 Weasel 即可看到效果。

2.2 直接基于 TSF 开发(更底层)

如果你想自己写 一个完整的 IME 或在现有的 TSF‑IME 中注入功能,需要:

  1. 熟悉 TSF 接口

    • ITfTextInputProcessor(入口)
    • ITfThreadMgrEventSinkITfKeyEventSink(键盘/焦点)
    • ITfDisplayAttributeProvider(候选文字属性)
    • ITfCandidateListUIElement(候选框 UI)
      官方文档:https://learn.microsoft.com/windows/win32/tsf/
  2. 获取官方示例 -- tsf-sample-ime(C++)展示了完整的注册、输入、候选框等流程[4]

    • 打开 SampleIME.sln 用 Visual Studio(建议 2022+)编译。
    • 编译后生成的 .dll 需要注册为 COM 服务器(regsvr32),并在注册表 HKLM\SOFTWARE\Microsoft\CTF\TIP 下添加键值。
  3. 在现有 TSF‑IME 中"插桩"

    • 方式 A:二次编译 -- 直接在 Weasel/PIME 源码中加入自定义 ITf* 实现(例如在 CandidateList 里加入自定义排序器)。
    • 方式 B:独立"辅助插件" -- 通过 系统钩子(SetWindowsHookEx)或 TSF 事件订阅(ITfThreadMgrEventSink)在不修改原 IME 的情况下拦截候选列表,再自行处理后再回传。
    • 关键点:候选列表是一组 ITfCandidateList 对象,使用 ITfCandidateList::GetCandidate 读取、SetCandidate(若实现)修改;如果目标 IME 没提供写接口,只能通过 隐藏原候选窗口、自行弹出自定义 UI(如使用 Immersive/WinUI)。
  4. 调试与部署

    • Debug 版本的 DLL 放到 C:\Windows\System32(或使用 regsvr32 /u / regsvr32 注册)
    • ctfmon.exe / tsfmon.exe(TSF 监视工具)确认注册成功
    • 通过 Visual Studio "Attach to Process" 附加到 explorer.exe 或目标程序,调试 COM 调用。

推荐路线:如果只是想"增强功能",先在 Rime + Lua 层实现;如果要 深度控制 UI、键盘事件或跨语言(如 C#),再考虑 TSF 原生。


3️⃣ 实际动手的步骤(以 Rime‑Weasel 为例)

  1. 准备环境

    • 安装 Git、Visual Studio 2022(C++ 桌面开发)

    • Clone 仓库

      复制代码
      git clone https://github.com/rime/weasel.git
      cd weasel
      git submodule update --init --recursive   # 拉取 librime
  2. 编译(可选,若只写插件不需要)

    复制代码
    mkdir build && cd build
    cmake .. -G "Visual Studio 17 2022"
    cmake --build . --config Release
  3. 编写插件

    • Lua 过滤器(最简)放在 weasel-data/lua/,比如 my_filter.lua(见上文示例)。

    • 在对应的 schema(例如 pane.default.yaml)中添加

      复制代码
      filters:
        - lua_filter@my_filter
  4. 热加载

    • Weasel 支持 即时生效:编辑完 *.yaml*.lua 后在任务栏右键 → "重新加载配置"。
    • 若想在运行时动态切换,可在 weasel UI 中打开 "插件管理" 界面,勾选对应 Lua。
  5. 调试

    • 开启 日志:编辑 weasel.yamllog_level: debug,日志写入 %AppData%\Rime\Weasel.log
    • notepad 打开日志,确认插件被加载 lua_filter my_filter loaded.

进阶:C++ 插件(如调用外部模型)

  1. librime/plugins/ 里新建目录 mycpp,实现 ProcessorFilter 接口(参考 plugins/translator)。
  2. CMakeLists.txt 中加入 add_subdirectory(mycpp),编译出 mycpp.dll
  3. default.custom.yamlmodule: mycpp 并在 schema 中 filters: - module_filter@mycpp

4️⃣ 资源汇总(点击即可访问)

类型 链接 说明
Rime 核心库 https://github.com/rime/librime C++ 核心,含插件目录[6]
Weasel(Windows 前端) https://github.com/rime/weasel 官方 Windows 客户端,附带插件文档
PIME(另一 Windows 前端) https://github.com/Doraemon-OS/PIME 基于 TSF,适合想直接操作 COM 的人
OpenVanilla‑Win32 https://github.com/jrywu/OpenVanilla-Win32 跨平台插件框架,已移植到 x86/x64[3]
TSF 示例 IME https://github.com/nathancorvussolis/tsf-sample-ime 完整的 Text Services Framework 示例,展示注册、候选窗等[4]
Microsoft TSF 文档 https://learn.microsoft.com/windows/win32/tsf/ 官方接口、开发指南
Rime Lua 插件文档 https://github.com/rime/librime-lua Lua 过滤器/翻译器的 API
Weasel 插件指南(中文) https://github.com/rime/weasel/wiki/Plugins 如何在 Weasel 中加载 Lua/C++ 插件

5️⃣ 给你的一点建议

目标 推荐技术栈 理由
快速实现词库/过滤 Rime + Lua 零编译、热加载,社区成熟,文档完整
想自定义 UI(候选框、皮肤) Weasel(C++/Qt)或 PIME 前端源码开源,直接改 UI
深度系统层面(跨进程、键盘钩子) TSF(C++) 官方唯一的 Windows 输入法框架,最底层控制
跨平台(Windows + macOS + Linux) Rime 同一套词库、同一套过滤脚本,多平台共享

结论:在 Windows 下最好的开源输入法生态是 Rime,它提供了 Lua 与 C++ 两层插件入口,几乎可以满足所有"加强/自定义"需求。如果你想了解 Windows IME 的底层机制,TSF‑sample‑IME 与 OpenVanilla 是很好的学习素材。祝你玩得开心,插件写得顺利 🎉!

相关推荐
yingdonglan2 小时前
鸿蒙跨端Flutter学习——GridView高级功能
linux·运维·windows
JAVA+C语言2 小时前
多主机 TCP 通信
网络·windows·tcp/ip
LuminescenceJ3 小时前
GoEdge 开源CDN 架构设计与工作原理分析
分布式·后端·网络协议·网络安全·rpc·开源·信息与通信
亿坊电商3 小时前
在多商户商城系统中,如何实现不同商户数据的严格隔离与安全保障?
开源·商城系统
m0_694845573 小时前
网站账号太多难管理?Enterr 开源自动化工具搭建教程
运维·服务器·前端·开源·自动化·云计算
Yeats_Liao4 小时前
异步推理架构:CPU-NPU流水线设计与并发效率提升
python·深度学习·神经网络·架构·开源
比奇堡鱼贩4 小时前
python第二次作业--函数
linux·运维·windows
pursue.dreams6 小时前
马斯克开源X推荐算法深度解析:Grok驱动的推荐系统架构
系统架构·开源·推荐算法·x
OpenCSG6 小时前
KAIYUAN-2B 开源大模型突破解析:OpenCSG 数据集如何破解中文大模型训练困境
开源