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

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

项目代码仓库/下载页主要技术栈许可证备注
Rime (中州韵) + Weaselhttps://github.com/rime/weasel
(核心库 librime
C++ (CMake) + Lua 脚本BSD‑3目前最活跃的跨平台方案,Weasel 是官方的 Windows 前端[6]
PIMEhttps://github.com/Doraemon-OS/PIMEC++ (TSF)GPL‑3同样基于 Rime 引擎的 Windows 前端,适合想直接操作 TSF 的开发者
OpenVanilla‑Win32https://github.com/jrywu/OpenVanilla‑Win32C / C++GPL‑3老牌的跨平台插件框架,Windows 版已经移植到 x86/x64[3]
fcitx‑rime (Windows 版)https://github.com/fcitx/fcitx5-rimeC++、QtGPL‑3通过 fcitx5 迁移到 Windows(需要自行编译)
ibus‑rime (WSL + GUI)https://github.com/rime/ibus-rimeC、PythonBSD‑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 处理候选词列表(过滤、排序、加注释等)只需要对候选进行后处理,不改动 UIlibrime‑lua 模块文档(仓库 librime-lua
自定义词库/扩展词典编写 *.txt/*.dict.yaml,放进 rime 目录并在 default.custom.yaml 中 patch 引入增加专业术语、行业词汇Rime 官方 “词典格式”说明
C/C++ 插件(模块)在 librime/plugins 目录编写 C++ 动态库,实现 RIME_API 接口(如 ProcessorTranslatorFilter)并在 rime.yaml 中 module 引入需要高性能或调用外部库(机器学习、网络)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++ 桌面开发)
  2. 编写插件
    • Lua 过滤器(最简)放在 weasel-data/lua/,比如 my_filter.lua(见上文示例)。
  3. 热加载
    • Weasel 支持 即时生效:编辑完 *.yaml 或 *.lua 后在任务栏右键 → “重新加载配置”。
    • 若想在运行时动态切换,可在 weasel UI 中打开 “插件管理” 界面,勾选对应 Lua。
  4. 调试
    • 开启 日志:编辑 weasel.yamllog_level: debug,日志写入 %AppData%\Rime\Weasel.log
    • 用 notepad 打开日志,确认插件被加载 lua_filter my_filter loaded.

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

filters: - lua_filter@my_filter 

编译(可选,若只写插件不需要)

mkdir build && cd build cmake .. -G "Visual Studio 17 2022" cmake --build . --config Release 

Clone 仓库

git clone https://github.com/rime/weasel.git cd weasel git submodule update --init --recursive # 拉取 librime 

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

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

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

类型链接说明
Rime 核心库https://github.com/rime/librimeC++ 核心,含插件目录[6]
Weasel(Windows 前端)https://github.com/rime/weasel官方 Windows 客户端,附带插件文档
PIME(另一 Windows 前端)https://github.com/Doraemon-OS/PIME基于 TSF,适合想直接操作 COM 的人
OpenVanilla‑Win32https://github.com/jrywu/OpenVanilla-Win32跨平台插件框架,已移植到 x86/x64[3]
TSF 示例 IMEhttps://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-luaLua 过滤器/翻译器的 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 是很好的学习素材。祝你玩得开心,插件写得顺利 🎉!

Read more

C语言游戏开发:Pygame、SDL、OpenGL深度解析

C语言游戏开发:Pygame、SDL、OpenGL深度解析

C语言游戏开发:Pygame、SDL、OpenGL深度解析 一、前言:为什么游戏开发是C语言开发的重要技能? 学习目标 * 理解游戏开发的本质:编写程序实现游戏逻辑、图形渲染、用户交互 * 明确游戏开发的重要性:支撑游戏产业的发展,成为游戏开发者的必备技能 * 掌握本章学习重点:Pygame、SDL、OpenGL的开发方法、避坑指南、实战案例分析 * 学会使用C语言开发游戏,实现游戏逻辑和用户交互 重点提示 💡 游戏开发是C语言开发的重要技能!随着游戏产业的发展,游戏开发的需求越来越大,C语言的高性能和可移植性使其在游戏开发中具有重要地位。 二、模块1:Pygame游戏开发基础 2.1 学习目标 * 理解Pygame的本质:基于SDL的Python游戏库,简化游戏开发 * 掌握Pygame的核心架构:窗口管理、事件处理、图形渲染、音频播放 * 掌握Pygame的开发方法:使用Pygame库进行游戏开发 * 掌握Pygame的避坑指南:避免窗口创建失败、避免图形渲染错误、避免事件处理错误 * 避开Pygame使用的3大常见坑 2.

By Ne0inhk
【3月考】二级Python最新真题及满分代码合集(基本操作题部分)

【3月考】二级Python最新真题及满分代码合集(基本操作题部分)

本套试题内容适配2025年9月考试 配套讲解视频欢迎关注B站:大头博士先生 考前押题关注微博:大头博士先生 祝大家优秀拿下!!! 第1套题 【题目素材】 # 请在______处使用一行代码或表达式替换## 注意:请不要修改其他已给出代码import ______ txt =input("请输入一段中文文本:") ______ print("{:.1f}".format(len(txt)/len(ls))) 【参考代码】 # 请在______处使用一行代码或表达式替换## 注意:请不要修改其他已给出代码import jieba txt =input("请输入一段中文文本:") ls=jieba.lcut(txt)print("{:.1f}".format(len(txt)/len(ls)

By Ne0inhk