摘要:本文从开发者视角拆解 yyzTools 的核心功能与架构设计,涵盖命令面板、本地 OCR、编码解码、批量处理、自定义扩展模块开发,以及 C++ + WebView2 混合架构的技术分析。适合 Windows 效率工具开发者、运维工程师、技术爱好者阅读。
标签:Windows效率工具本地OCRWebView2C++桌面开发开源替代方案
一、为什么开发者需要关注 yyzTools
作为开发者,我们日常会用到大量工具:Everything 搜文件、Ditto 管剪贴板、Snipaste 截图、Postman 测接口、在线 JSON 格式化、在线正则测试、Base64 编解码、哈希校验……这些工具散落在桌面、任务栏和浏览器标签里,各自为战。
yyzTools 的思路是把这些工具原生融合进一个安装包——C++ 负责系统级操作,WebView2 + 前端负责界面渲染,两者通过桥接层通信。当前版本 v1.0.3.1300,永久免费,本地优先,支持 12 种语言。
本文不重复官网的功能列表,而是从开发者实际使用场景出发,拆解各个工具模块的技术细节和实战用法。
二、架构设计:C++ + WebView2 混合方案
先聊架构,这决定了 yyzTools 的能力边界和性能特征。
┌─────────────────────────────────────────┐ │ 前端页面 (Alpine.js + JS) │ │ cmdplate / ocr / translate / ... │ ├─────────────────────────────────────────┤ │ WebView2 桥接层 (BindSync/Async) │ │ window.Zen.xxx() │ ├─────────────────────────────────────────┤ │ C++ NativeApi 层 │ │ FileManager / ProcessManager / │ │ ClipboardManager / OcrManager / │ │ DownloadManager / CmdManager ... │ ├─────────────────────────────────────────┤ │ Win32 系统 API │ │ 文件 / 进程 / 窗口 / 剪贴板 / 屏幕录制 │ └─────────────────────────────────────────┘设计要点:
- C++ 层处理所有系统级操作:文件管理、进程控制、窗口管理、剪贴板、OCR 引擎调用、屏幕录制、加密解密等。这些操作如果用 JS 实现要么做不到,要么性能不够。
- 前端层用 Alpine.js + 原生 JS + Vite 构建,每个功能页面独立一个目录(
web/cmdplate、web/ocr、web/translate等),互不耦合。界面迭代不需要重新编译 C++。 - 桥接层通过 WebView2 的
BindSync(同步返回)和BindAsync(异步回调)把 C++ 能力暴露给前端。前端统一通过web/lib/zen_api.js的ZenAPI封装类调用,不直接碰window.Zen。
接口契约:输入用位置参数,输出恒为 JSON 对象{ error, errorMsg, ... }。error为 0 表成功,非 0 表失败。前端统一用ZenAPI.isOk(res)判断,不直接比较error字段(因为 C++ 有两条 JSON 生成路径,error类型可能是数字0也可能是字符串"0")。
这种架构的实际意义:
- 文件搜索走 C++ 直接调 Everything SDK,毫秒级响应
- OCR 走本地 RapidOCR 引擎,离线运行
- 界面改一行 CSS 不用重新编译 .exe,只需更新前端 dist
三、命令面板:多域搜索引擎
命令面板是 yyzTools 的统一入口,Alt + 空格唤起。它不是简单的应用启动器,而是一个多域搜索系统,用前缀切换搜索域:
| 前缀 | 搜索域 | 底层实现 |
|---|---|---|
| 无 | 应用 + 系统命令 + 系统设置 + 命令模块 | C++ 遍历注册表 + Shell API |
f | 全盘文件 | C++ 调用 Everything SDK |
p | 运行中进程 | C++ 遍历系统进程快照 |
w | 窗口 | C++ EnumWindows |
b | 浏览器书签 | C++ 解析浏览器书签数据库 |
c | 剪贴板历史 | C++ 剪贴板监听 + 本地存储 |
> | 命令行 | C++ CreateProcess |
拼音搜索实现
命令面板支持中文拼音搜索,输入weixin或wx能命中微信。底层实现上,yyzTools 对中文应用名生成拼音索引,搜索时同时匹配原名和拼音。别名索引只取en+zh_cn两种语言(而非全部 12 种),避免别名膨胀导致跨语误命中。
即时计算
搜索框输入数学表达式,实时计算结果:
128*0.85 → 108.8 sqrt(144)+3^2 → 15 0x1F + 0b1010 → 47回车复制结果。算折扣、算进制转换、算公式,不用单独开计算器。
四、开发者工具集实战
这一节重点讲 yyzTools 内置的开发者工具,这是 CSDN 读者最关心的部分。
4.1 正则表达式测试器
实时匹配高亮、分组查看、常用表达式速查。
实战场景:验证手机号正则
输入文本:13800138000, 15812345678, 12345678901 正则:^1[3-9]\d{9}$ → 逐行匹配,高亮命中行,分组1 = 区号,分组2 = 号码4.2 编码解码工具
支持 Base64 / URL / HTML / Unicode / 进制 / 摩尔斯电码等常见编码互转。
实战场景:JWT Token 解码
输入(Base64 编码的 JWT payload): eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIn0 → Base64 解码: {"sub":"1234567890","name":"John Doe"}实战场景:URL 参数解码
输入: https%3A%2F%2Fexample.com%2Fapi%3Fq%3D%E4%BD%A0%E5%A5%BD → URL 解码: https://example.com/api?q=你好4.3 哈希计算
支持 MD5 / SHA-1 / SHA-256 / SHA-512 等摘要算法,支持文本和文件校验。
实战场景:校验下载文件的完整性
选择文件 → 选择算法 SHA-256 → 生成摘要 → 与官方公布的校验值比对4.4 加密解密
基于 OpenSSL 实现,支持对称加密(AES 等)和非对称加密(RSA 等),以及密钥生成。
实战场景:生成 RSA 密钥对
选择算法:RSA 密钥长度:2048 → 生成公钥 + 私钥 → 导出 PEM 格式文件4.5 数据转换
支持 JSON / YAML / XML / TOML / CSV 互转,以及进制、大小写、全角半角转换。
实战场景:JSON 转 YAML
// 输入 JSON { "server": { "host": "localhost", "port": 8080, "timeout": 30 }, "logging": { "level": "info", "file": "/var/log/app.log" } }# 输出 YAML server: host: localhost port: 8080 timeout: 30 logging: level: info file: /var/log/app.log实战场景:进制转换
输入:255 → 十进制:255 → 二进制:11111111 → 十六进制:FF → 八进制:3774.6 数据生成
支持 UUID / GUID、ULID、随机字符串、测试数据批量生成。
实战场景:批量生成测试 UUID
类型:UUID v4 数量:100 → 批量生成 100 个 UUID v4 → 一键复制4.7 命令行执行
命令面板输入>前缀,直接执行系统命令:
> ipconfig → 查看网络配置 > ping baidu.com → 测试连通性 > netstat -ano → 查看端口占用支持管理员身份运行。
五、本地 OCR 实战
yyzTools 内置 RapidOCR 引擎,完全离线运行,不调云端 API。
技术细节
- 引擎:RapidOCR(基于 PaddleOCR 的 C++ 推理引擎)
- 模型:本地模型文件,随安装包一起分发
- 调用方式:C++ 层通过
BindAsync异步调用(OCR 是耗时操作,不能阻塞 UI 线程) - 识别能力:中英文混排识别,支持截图区域选择
实战场景
- 截图识别代码:从视频教程或文档截图中提取代码文本
- 截图识别表格:从截图中的表格提取数据
- 联动翻译:OCR 识别结果 → 一键送翻译 → 一键回填剪贴板
操作流程: 1. Ctrl + Shift + 截图框选区域 → OCR 识别 2. 识别结果面板出现 → 点击「翻译」 3. 翻译结果出现 → 点击「复制」整个过程不联网(翻译除外),不上传任何数据。
六、批量处理引擎
yyzTools 内置了三个重量级命令行工具并封装成图形界面。
6.1 图片批量处理(ImageMagick)
| 操作 | 参数示例 | 场景 |
|---|---|---|
| 批量缩放 | 宽度 800px,等比缩放 | 电商商品图统一尺寸 |
| 批量裁剪 | 中心裁剪 300x300 | 头像批量处理 |
| 格式转换 | PNG → WebP | 压缩图片体积 |
| 加水印 | 右下角 20% 透明度 | 版权保护 |
| 压缩 | 质量 80% | 减少文件体积 |
6.2 视频批量处理(FFmpeg)
| 操作 | 参数示例 | 场景 |
|---|---|---|
| 批量转码 | H.264 → H.265 | 节省存储空间 |
| 截取片段 | 00:00:10 - 00:00:30 | 提取视频精华 |
| 抽帧 | 每秒 1 帧 | 制作 GIF 素材 |
| 压缩 | CRF 28 | 减小视频体积 |
| 提取音频 | MP4 → MP3 | 提取背景音乐 |
6.3 PDF 批量处理(pdfcpu + Ghostscript)
| 操作 | 场景 |
|---|---|
| 合并 | 多份合同合并成一个文件 |
| 拆分 | 按页码范围拆分 |
| 加水印 | 添加机密水印 |
| 压缩 | 减小 PDF 体积 |
| 加密/解密 | 设置打开密码 |
6.4 批量重命名
支持多种规则组合,改之前先预览:
| 规则 | 示例 | 场景 |
|---|---|---|
| 序号 | file_001, file_002, ... | 批量排序 |
| 替换 | 把 "副本" 替换为空 | 清理文件名 |
| 正则 | 匹配日期模式重新排列 | 按日期归档 |
| EXIF 时间 | 按拍摄时间命名照片 | 照片管理 |
| 大小写 | 全部小写 | 统一命名规范 |
七、自定义扩展:开发你自己的命令模块
这是 yyzTools 最开发者友好的特性:往 Modules 目录放一个 JSON 文件就能新增命令,无需编译、无需重启。
7.1 .zenmod 文件格式
{ "id": "mydeploy", "type": "app", "name": { "zh_cn": "部署工具", "en": "Deploy Tool" }, "desc": { "zh_cn": "快速打开内网部署平台", "en": "Quick open internal deploy platform" }, "icon": "iVBORw0KGgo...", "cmdPath": "yyzBrowser.exe", "cmdArgs": "--url=https://deploy.internal.com --size=1200x800" }字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
id | string | 全局唯一标识,语言无关 |
type | string | "app"类型通过cmdPath调起外部程序 |
name | object | 多语言文案,key 为语言码(zh_cn/en/ja...) |
desc | object | 描述,同样支持多语言 |
icon | string | Base64 编码的图标 |
cmdPath | string | 可执行程序路径 |
cmdArgs | string | 命令行参数 |
7.2 实战:新增一个 AI 工具入口
假设你想在命令面板里快速打开自己的 AI 对话页面:
- 在
src/Modules/AI/目录下创建myai.zenmod:
{ "id": "myai-chat", "type": "app", "name": { "zh_cn": "我的AI对话", "en": "My AI Chat" }, "desc": { "zh_cn": "快速打开自定义AI对话窗口", "en": "Quick open custom AI chat window" }, "cmdPath": "yyzBrowser.exe", "cmdArgs": "--url=https://chat.example.com --size=900x700" }type: "app"会调用 yyzTools 内置的yyzBrowser.exe(无边框轻量浏览器),通过--url指定网址,--size指定窗口尺寸。打开命令面板,输入「我的AI」或拼音
wodaiai,直接命中。
7.3 多语言文案规则
- 语言码使用下划线小写风格:
zh_cn、zh_tw、en、ja、ko、fr、de、es、ru、ar、pt、it - 支持三级回落:当前语言 →
en→ 纯字符串写法 - 纯字符串写法
"name": "部署工具"仍然有效(向后兼容) - 一个
.zenmod文件覆盖所有语言,不做每语言一个文件
7.4 添加系统命令
如果想新增一个系统命令(如打开设备管理器):
{ "id": "devmgmt", "type": "app", "name": { "zh_cn": "设备管理器", "en": "Device Manager" }, "desc": { "zh_cn": "查看和管理硬件设备", "en": "View and manage hardware devices" }, "cmdPath": "mmc.exe", "cmdArgs": "devmgmt.msc" }放在src/Modules/Sys/目录下即可。
7.5 使用 yyzCmd 执行系统操作
yyzTools 还有一个独立的命令行执行器yyzCmd.exe,支持关机、重启、音量控制、显示器管理、回收站操作、打开目录等。可以在.zenmod中通过cmdPath指向它:
{ "id": "monitor-off", "type": "app", "name": { "zh_cn": "关闭显示器", "en": "Turn Off Monitor" }, "desc": { "zh_cn": "立即关闭显示器省电", "en": "Turn off monitor immediately" }, "cmdPath": "yyzCmd.exe", "cmdArgs": "--monitor=off" }八、其他实用功能速览
| 功能 | 说明 |
|---|---|
| 文件预览 | 空格键预览 Word/Excel/PPT/PDF/图片/视频/代码/压缩包/DXF,免装 Office |
| 剪贴板历史 | 后台记录文本与图片,支持搜索、钉图到桌面、联动翻译/OCR |
| 超级翻译 | 多引擎划词翻译,可自选服务和目标语言 |
| 屏幕截图 | 区域截图 + 滚动长截图 + 贴图钉屏 |
| 屏幕录制 | 录制屏幕与音频,鼠标跟随缩放,按键提示,一键导出 |
| 文件下载 | 基于 Aria2 多线程下载,断点续传,队列管理 |
| 动态壁纸 | 网页/视频贴到桌面图标层下方,不遮挡操作 |
| 应用统计 | 记录各应用使用时长与激活次数 |
| 提醒助手 | 单次/每日/每周/每月提醒 |
| 二维码 | 生成与识别二维码 |
| 计算稿纸 | 多行连续计算,支持变量与单位换算 |
九、性能与隐私
性能特征
- 文件搜索:C++ 直接调 Everything SDK,全盘文件毫秒级响应
- OCR:本地 RapidOCR 引擎,无网络延迟
- 内存占用:所有功能共享一个进程,比十几个独立工具各自驻留后台更省内存
- 分包更新:主程序、前端页面、命令模块、FFmpeg、OCR 模型各自独立打包,更新只下载变化的子包
隐私保障
| 数据类型 | 处理方式 |
|---|---|
| 剪贴板历史 | 本机存储,不上传 |
| OCR 内容 | 本地模型处理,不联网 |
| 文件索引 | 本地 Everything 索引 |
| 应用统计 | 本机记录 |
| 文件预览 | 本地解析 |
| 翻译内容 | 需联网调翻译服务 API(唯一需要联网的数据功能) |
不要求注册账号,不收集身份信息,不做用户画像或行为埋点。
十、与主流工具的技术对比
| 维度 | yyzTools | PowerToys | uTools | Flow Launcher |
|---|---|---|---|---|
| 架构 | C++ + WebView2 + 前端 | C# + WPF | Electron + 插件 | C# + WPF |
| 功能集成 | 40+ 全内置 | ~20 模块松散共存 | 插件市场拼装 | 插件市场拼装 |
| 本地 OCR | RapidOCR 离线 | 无 | 插件(可能联网) | 插件 |
| 批量处理 | ImageMagick/FFmpeg/pdfcpu | 无 | 插件 | 无 |
| 文件预览 | Office/PDF/代码/压缩包 | SVG/PDF/MD | 插件 | 无 |
| 截图录屏 | 截图/长截图/钉屏/录屏 | 截图 | 插件 | 无 |
| 扩展方式 | JSON 文件(零编译) | C# 插件 | 插件市场 | C# 插件 |
| 数据联动 | 剪贴板→OCR→翻译→回填 | 无 | 无统一数据层 | 无 |
| 内存模型 | 单进程共享 | 多模块各自进程 | Electron(内存偏高) | 多插件各自进程 |
核心差异:yyzTools 的JSON 文件即插件扩展模式,扩展成本远低于 C# 插件方案,代价是扩展能力受限于预定义的type类型(当前主要是app类型)。