功能说明
DraftDepot 稿仓是一个一稿多投工具。

使用此工具写的文章可以一键发布到9大平台:
- 微信公众号
- 知乎
- CSDN
- 开源中国
- 博客园
- 掘金
- 51CTO
- InfoQ
- 阿里云开发者社区

(目前多为技术平台,后续将增加更多平台)
本工具仅负责把文章灌注到目标平台,不直接发布文章(想发布文章需用户手动操作,以便用户在文章发布前确认文章内容是否正确)
文章内的图像也会同步上传到目标平台(多次发布文章时,同一个图片不会重复上传)
特性描述
本工具基于 WebView2 技术研发,仅支持Windows 10/11操作系统
编译后仅一个4MB左右的可执行文件

使用成本很低。
其他特性:
- 本地存储:数据目录
%APPDATA%\DraftDepot - 富文本编辑器:基于 ++roosterjs++
- 代码块高亮:基于++shiki++
代码着色 - WebView2 运行时 ≥ 115.0.1901.177(缺失或过旧时程序会弹窗引导下载)
- 图片即贴即存:粘贴或拖入的图像自动落盘到数据目录
- 自动保存:改动后 2 秒内入库
- 分类与文章管理:分类树支持多层嵌套,右键改名/删除
开源地址
源码仓库:https://github.com/xland/DraftDepot
下载地址:https://github.com/xland/DraftDepot/releases
关键技术
DraftDepot 为每个平台配一份脚本,这个脚本主要干三件事:
- 认页面------等这个网站的编辑器渲染出来,找到文章标题框和正文框在哪;
- 填内容------把文章标题和正文写入目标平台的编辑框,写进去还得让对方页面"认账"(有的是 Vue 受控组件,有的是 CodeMirror / ByteMD 编辑器,写法各不相同);
- 搬图片------图像原本存在本机,所以脚本要把图像文件取出来、传到该网站的图床、再把地址换回去。传过的记在库里,下次不重复传。
这些看上去是三件事,背后靠这么几项技术撑着:
- 脚本怎么进对方的页面:WebView2 提供了脚本注入技术(AddScriptToExecuteOnDocumentCreated)。这是整个方案的入口:对方页面的每一屏、每一次跳转都会自动带上我们的脚本。
- 脚本怎么向本机要东西:脚本跑在网页里,要文章正文、要记"这张图传过了"、要给主界面发通知,都得问 C++。
- 网页里的脚本怎么读本机文件:网页是碰不到硬盘的。这里的办法是让 C++ 回包时额外附带一个"目录句柄",脚本拿到的是 File System Access 的 FileSystemDirectoryHandle,之后就能自己按文件名取图片文件,不用每张图都来回问一次。
- 图片为什么不重复传:每传成功一张,就把"文件名 + 平台 + 图床地址"写进 SQLite中。下次同一张图再出现(重发、或别的文章用到它),先用旧地址,省一趟上传,对方图床也不堆重复副本。
- 图片怎么缩放:C++ 侧用系统自带的 WIC 组件缩放的,且每次都基于原图重新生成,所以缩小后再放大不会失真。
除此之外,还有几个关键点:
为什么一个exe就完成了本应用的所有功能:
因为界面本身、九份站点脚本、数据库引擎,全都被当成"资源"编进了 exe,运行时从 exe 自己身上取。
主界面自己是怎么跑起来的:
WebView2 把 https://app.localhost/* 这类请求拦截下来,从资源或本机数据目录应答,所以一个 exe 就能独立运行