| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
受够了某狗输入法。
弹窗广告铺天盖地,关都关不掉——关闭按钮小得跟蚂蚁似的,点歪了直接弹出一整个浏览器窗口。这还不算完,用着用着发现电脑上莫名其妙多了一堆根本没装过的软件:某狗桌面壁纸、某狗浏览器、某某垃圾清理工具……我保证不是我装的,我绝对没有点过任何"安装"按钮。某狗在后台一声不吭就给你塞进来,跟小偷没什么两样。
这种流氓行径必须谴责。一个输入法而已,凭什么监听你的键盘、统计你的词频、扫描你的硬盘、把你的输入习惯上传到它们服务器?凭什么弹广告、装全家桶?
于是就有了这个项目——一个极简的拼音输入法,开源,不需要联网,隐私完全可控。没有广告,没有后台,没有全家桶,更没有藏在角落里的"推荐安装"。代码干净透明,每一行都看得见。
功能上也没含糊:支持全拼/简拼、模糊音(z/zh、c/ch、s/sh、n/l、f/h、en/eng、in/ing)、繁简体一键切换(2000+ 字符映射 + 词汇级消歧 + 两岸 IT 术语差异)、用户自定义词库、词频自动学习、DP 拼音分割(输入 haiyoumeiyou 自动拆成「还有没有」)、多皮肤配色、候选词数量可调……该有的都有。
一句话:我的输入法,我做主。
┌──────────────────────────────────────────────────────────────────────┐
│ 用户应用程序进程 (Chrome/Edge/Notepad...) │
│ │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ PinyinIMETSF.dll (TSF COM 文本服务, 注入到每个进程) │ │
│ │ │ │
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │ │
│ │ │ TextService │ │ PinyinEngine │ │ CandidateWindow │ │ │
│ │ │ (TSF COM) │ │ (DictClient) │ │ (GDI+ 自绘) │ │ │
│ │ └──────────────┘ └──────┬───────┘ └──────────────────┘ │ │
│ │ │ IPC Client │ │
│ └───────────────────────────┼──────────────────────────────────┘ │
│ │ │
└──────────────────────────────┼──────────────────────────────────────┘
│
Named Shared Memory (64KB) + Named Events
Local\ 命名空间 (优先), Global\ 回退 (沙盒兼容)
│
┌──────────────────────────────┼──────────────────────────────────────┐
│ PinyinIMEDictService.exe (后台词库服务, 单实例, 常驻) │
│ │ │
│ ┌───────────────────────────┼──────────────────────────────────┐ │
│ │ IPC Server Loop │ BinaryDictReader │ │
│ │ WaitForMultipleObjects │ dict.bin (MapViewOfFile) │ │
│ │ EvtQuery + EvtStop │ 排序数组 + 二分查找 │ │
│ └───────────────────────────┴──────────────────────────────────┘ │
│ │
│ dict.bin (~25 MB on disk, ~5 MB RSS) │
│ · 494,072 拼音 key · 1,236,485 词条 │
│ · String Pool (dedup UTF-8) · DictFileEntry[] (word_off, freq) │
└──────────────────────────────────────────────────────────────────────┘
▲
Windows Task Scheduler (ONLOGON 触发器)
ServiceManager (启动/停止/开机自启)
│
┌──────────────────────────────┴──────────────────────────────────────┐
│ PinyinIME.exe (配置工具) │
│ ┌──────────────┐ ┌────────────────┐ ┌──────────────────────┐ │
│ │ Settings UI │ │ TSF Register │ │ ServiceManager │ │
│ │ (皮肤/字体) │ │ (系统注册/注销) │ │ (服务管理/开机自启) │ │
│ └──────────────┘ └────────────────┘ └──────────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
dict.bin 由 dict_compiler.exe 离线编译生成:
dict_compiler.exe cn_dicts dict.bin [--max-chars N] [--hotwords N]
cmake -B build -G "Visual Studio 17 2022" -A x64
cmake --build build --config Release输出:
所有产物均静态链接 CRT (/MT),无需安装任何运行时。
项目附带一个轻量级词库查询测试工具,可直接验证拼音候选词,无需注册 IME 或启动 IPC 服务:
# 构建
cmake --build build --config Release --target test_partial
# 查询任意拼音的候选词
build\Release\test\Release\test_partial.exe nihao
build\Release\test\Release\test_partial.exe zhongg
build\Release\test\Release\test_partial.exe xianz工具直接读取 dict.bin 进行精确匹配 + 前缀搜索,输出 Top 20 候选词及频率。支持未输完的拼音,例如:
> test_partial.exe xianz ══ "xianz" ══ Exact: none Prefix: 294 results: 现在(503182) 限制(500607) 现状(500251) 闲置(89840)...
还有完整的 IPC 集成测试(需要两个终端):
cmake --build build --config Release --target test_service --target test_client
:: 终端 1: build\Release\test\Release\test_service.exe
:: 终端 2: build\Release\test\Release\test_client.exe -v测试客户端模拟逐字母打字,逐击键显示候选词,最后以退出码报告通过/失败。
注册过程会自动:
| 文件/目录 | 说明 |
|---|---|
| exe/main.cpp | EXE 入口:托盘图标、跨进程消息、单实例管理 |
| exe/settings_window.h | 设置窗口:纯 Win32 自绘 UI、皮肤预览、用户词典对话框 |
| exe/registration.h | TSF 系统注册:COM 注册、TSF Profile 注册、UAC 提权 |
| exe/service_manager.h | 服务管理:启动/停止 PinyinIMEDictService、Task Scheduler 开机自启 |
| exe/register_window.h | 注册进度窗口:逐步展示 COM/TSF/词库编译/服务启动过程 |
| dll/dll_main.cpp | DLL 入口:COM DllMain、DllRegisterServer、DllGetClassObject |
| dll/text_service.cpp | TSF 核心:ITfTextInputProcessorEx、ITfKeyEventSink、组合管理、按键处理 |
| dll/text_service.h | TSF 接口声明 + DisplayAttribute + EditSession |
| dll/class_factory.h | COM IClassFactory 实现 |
| dll/pinyin_engine.h | 拼音引擎:缓冲区、候选匹配、DP 分词、自学习、翻页 |
| dll/dict_client.h | IPC 词库客户端:通过命名共享内存与 DictService 通信 |
| dll/ipc_client.h | IPC 协议客户端:共享内存映射、查询/回复事件、50ms 超时 |
| dll/candidate_window.h | GDI+ 候选窗:自绘渲染、齿轮按钮、光标定位 |
| dll/shm_dict.h/cpp | 共享内存扁平 Trie(遗留,已被 IPC 模式替代) |
| dll/trie_dict.h/cpp | 前缀树内存数据库(遗留) |
| dll/s2t_data.h | 简繁转换数据:2000+ 字符映射 + 词汇消歧 + 两岸 IT 术语 |
| service/dict_service.cpp | 后台词库服务:dict.bin mmap 加载、IPC 服务循环、单实例保证 |
| service/dict_compiler.cpp | 离线词库编译器:YAML→dict.bin,排序数组格式 |
| shared/dict_binary.h | 二进制词库格式定义 + BinaryDictReader 查询引擎(v2 DAT / v3 排序数组) |
| shared/ipc_protocol.h | IPC 协议:共享内存布局、事件名、沙盒安全描述符、命名空间回退策略 |
| shared/ime_ipc.h | 跨进程内核对象名:单实例互斥体、服务互斥体、窗口消息 |
| shared/pinyin_settings.h | DLL/EXE 共享设置结构:序列化/反序列化、9 款预设皮肤 |
| shared/tsf_guids.h | TSF GUID 定义:CLSID、Profile GUID |
| shared/unique_handle.h | RAII Windows HANDLE 封装 |
| shared/utf_utils.h | UTF-8 / UTF-16 / Wide 转换工具 |
| rime-ice/cn_dicts/ | rime-ice 词库(git submodule) |
| pinyin_config.ini | 用户配置文件(运行时生成) |
| user.dict | 用户自学习词库(运行时生成) |
基于《简化字总表》三表体系:
转换策略:最长词匹配优先 → 单字映射回退,确保「一简对多繁」正确消歧。
词汇覆盖:
每次选择候选时:
MIT License
| Back | FazBrowse Home | New Git URL |