我给自己造了一个桌面效率助手:剪贴板、截图提单、全盘文件搜索,全都塞进快捷键里

说明:本文配图均为界面示意图,图中的文件名、路径、列表内容已做马赛克处理,不涉及真实数据。

一、起因:每天被这些小事磨掉一小时

我每天的工作里,有大量时间花在「找东西」上:

  • 微信群里发的 Excel,下载完就找不到在哪个目录了;
  • 三个月前写过的某个方案,只记得标题里有两个字;
  • 一段复制的文字想存下来,过两天翻聊天记录翻半天;
  • 提 Bug 要截图、要标注、要贴到飞书表格里,一套流程七八步;
  • 账号密码散落在备忘录、记事本、浏览器书签里。

这些事单件都不难,但一天来回几十次,人就烦了。市面上的工具要么太重,要么要登录账号、把数据传上云,我不太放心。

所以我干脆自己写了一个:一个常驻托盘的 Windows 桌面效率助手,所有数据都存在本地,不联网也能用大部分功能。

技术栈很简单:Electron 33 + Vue 3,数据库用的是 sql.js(WASM 版 SQLite,纯 JS、免编译),装在本地 %APPDATA% 目录里,关掉窗口就缩到托盘,不占任务栏。


二、它现在能干什么

整个应用是「侧边栏 + 多页面」的结构,功能模块各管一摊,共用一套本地数据库。真正高频的是下面五个快捷键入口。

1. Ctrl+Shift+C:剪贴板剪藏

复制任何东西,按一下快捷键,内容就被抓下来了:自动清洗格式 → 算内容哈希去重 → 调大模型生成一句话摘要 → 存进本地库。

我把它当成「随手记的收纳盒」,剪藏库只保留当天内容,跨天自动清空,所以永远不会变成第二个垃圾场。没配置大模型 API 时,摘要自动降级成本地规则引擎,功能照样能用,只是不聪明。

2. Ctrl+Alt+F:全盘文件快搜(本文重点)

这是我花时间最多、也最常用的一个功能。

日常场景:屏幕顶部弹出一个半透明小面板,输入两个字,几百毫秒内给出结果,回车直接打开文件。像 macOS 的 Spotlight,但它是给 Windows 用的,而且能搜文件正文。

它现在支持的东西:

  • 文件名 + 正文双通道:文件名没命中,就去扫文档正文(PDF、Word、Excel、Markdown、纯文本都能提取文字),返回命中位置前后 30 字的片段,关键词高亮;
  • 类型过滤 :输入 ext:pdf 只搜 PDF,也可以点右侧的「文档」图标;
  • 多词组合 :发票 2024 表示两个词都要包含,-草稿 表示排除带「草稿」的;
  • 正则精确筛 :用 /正则/ 包起来,只筛文件名和路径,适合 ^2026-.*复盘 这类场景;
  • 三个分类:程序(读 Windows 真实使用记录,按最近打开排序)、操作(剪藏库内容,回车即复制)、文档;
  • 空态不空:什么都没输的时候,直接列出最近改动的 10 个文档;
  • 全套键盘操作:↑↓ 选择、Enter 打开、Ctrl+Enter 定位到文件夹、Ctrl+C 复制路径、Esc 关闭;右键还有「移至回收站」。

真实的性能数据(索引了 26.9 万个文件,这是我自己项目、代码、微信文件、下载目录的总和):

操作 实测耗时
文件名关键词搜索 约 55--150 ms
正文关键词搜索 约 210--350 ms
正则筛选文件名 约 235--330 ms
空态最近文件列表 约 100--200 ms

三、快搜背后的三个工程坑

一个「看起来很简单」的搜索框,实际上踩了不少坑,这里挑三个最有代表性的。

坑一:没有全文索引,只能硬扫

sql.js 编译的 SQLite 里没有 FTS5 全文索引模块,日志里一行 no such module: fts5 直接判了死刑。所以正文搜索只能是 LIKE 全表扫描,26 万行、4 亿字符,纯靠 CPU 硬扛。

扛下来的办法是控制扫描范围:

  • 索引只挑有用的目录(桌面 / 文档 / 下载,可自定义),node_modules、.git、dist 这类目录直接跳过;
  • 编译产物、图片、音视频、压缩包等扩展名只记文件名、不读内容,文件名照样能搜到,但不会浪费时间解析;
  • 大于 2MB 的文本写一个占位符,避免反复重读;
  • 后台增量构建,按修改时间和文件大小跳过没变过的文件,不重复劳动。

坑二:数据库膨胀到 1GB,启动开始变慢

索引到 26 万文件时,单个数据库文件涨到 1.07 GB。sql.js 的毛病是把整个库读进内存,于是每次启动都要读这一大坨,写一次设置还要把整库重写一遍------主界面明显变卡。

解决办法是拆库:

  • 主库 assistant.db 只留业务数据(设置、剪藏、会议纪要、Bug 记录、凭证),拆完只有 45 KB;
  • 索引库 search-index.db 单独放 26 万行文件索引,首次搜索才懒加载;
  • 迁移不做 VACUUM(1GB 库压缩时内存峰值会翻倍),而是新建空库、只拷业务表再替换,一次迁移 269,589 行,校验无误。

顺带加了个启动预热:应用启动 3 秒后,后台先把索引库读进内存,等你第一次按 Ctrl+Alt+F 时,不用再干等那 900 多毫秒。

坑三:Windows 上的「真毛玻璃」和圆角是死结

参考 macOS 那种白色半透明面板,一开始我用的是 Windows 系统级 Acrylic 材质。结果是:系统材质不受窗口裁剪影响,永远铺满整个矩形窗口------四角永远是方的,深色主题下还会压出一层黑罩。

试过用 setShape 裁圆角,Acrylic 直接无视。最后的方案是放弃系统材质,改成纯透明窗口 + 渐变 + 双边内阴影:

  • 面板用顶部稍亮、底部微暗的渐变做出「厚度」;
  • 用两条内阴影模拟玻璃边缘的反光,不加外投影(外投影在透明窗口上会出现黑边);
  • 收起态是窄胶囊,鼠标移入才展开成完整面板,展开和收起都不改窗口高度,只切换子元素,避免整窗重绘闪帧。

现在这个面板在深色桌面上也不会发灰,四角是干净的 16px 圆角。


四、另外三个顺手做掉的功能

Ctrl+Shift+S:截图标注 → 一键提 Bug 到飞书

按快捷键 → 全屏截图 → 用箭头、矩形、椭圆、画笔、文字标注 → 填标题和严重程度 → 自动上传截图、按天汇总到飞书电子表格里,返回文档链接。

截图流程有个必须遵守的顺序:先抓屏、再显示窗口。反过来的话,截图窗口自己会被拍进画面,第二次截图就永远是第一次的残留。

飞书那边也有细节:上传图片必须用 docx_image 类型挂到指定文档,文档里的图片块要按「建空块 → 挂素材 → 更新块」三步来,链接不能拿 open.feishu.cn 拼,得单独查元数据。这些都是一条条踩出来的。

Ctrl+Shift+O:截图 OCR

同一套截图流程,走文字识别,识别完直接复制走。开会拍 PPT、截个报错日志,比手打快得多。

凭证保险箱

主密码 + PBKDF2-SHA256(60 万次迭代 + 随机盐)+ AES-256-GCM 加密,凭证数据和剪藏库物理隔离。连续输错 5 次主密码自动锁定 1 分钟。账号密码终于不用散在记事本里了。


五、踩过的坑,挑几条真实的

  • 推理模型的返回不能直接取 content[0].text :通义千问这类模型会先吐一个 thinking 思考块,直接取第一个会拿到空,必须按类型过滤后拼 text,同时把 max_tokens 提到 4096,否则思考过程能把额度吃光。
  • PDF 解析库版本要锁死 :pdf-parse 装了 2.x 是 ESM 重写版,还带原生依赖,主进程中直接报 pdfParse is not a function;锁到 1.1.1(纯 JS)才稳。
  • 快捷方式图标不能直接取 :对 .lnk 调图标接口只会返回通用空白图标,必须先解析到目标 exe 再取。
  • 并发搜索会乱序:同一个关键词连打两次,先发的请求可能后回来,把最新结果覆盖成空列表。加一个版本计数器,只有最新那次能写 UI。
  • 主进程改代码不热更新:electron-vite 只热更新渲染层,改主进程必须手动重启,否则会陷入「代码明明改了却没反应」的自我怀疑。

六、做了这么久,它到底改变了什么

说实话,收益不是「效率提升 300%」那种漂亮数字,而是三件很小的事:

  1. 找文件不再有心理负担。 记不住路径没关系,记得两个词就行,按 Ctrl+Alt+F、打两个字、回车。
  2. 东西有地方放了。 剪藏库当天清空、凭证进保险箱、Bug 自动落到飞书表格,脑子里不用一直挂着「那个东西我存哪了」。
  3. 数据是自己的。 全部在本地,不上传、不登录、不依赖某个服务活着。断网也能用,服务下线也不会丢。

这个工具没有开源打算,因为它就是给「我这种工作方式」量身做的:微信收文件、每天提 Bug、偶尔翻旧方案、总要找密码。别人拿过去,可能一半功能都用不上。

但整个过程验证了一件事:日常里那些让你「哎,又要来一遍」的小动作,攒起来做一次自动化,回报比想象中大得多。 哪怕只是少按几次「打开文件夹、翻目录、复制路径」。


如果你也经常在 Windows 上找文件找到崩溃,可以先用 Everything 这类工具过渡。真正想顺手,还是得自己动手把工具捏成自己手的样子。

相关推荐
jktantan2 小时前
前端也需要事务:Vue Router 乐观更新、回滚与“过期事务”
前端·javascript·vue.js
biu_biubiu4 小时前
我开源了 Codebook
前端·vue.js
小李科技5 小时前
【性能优化】事件委托:目标定位与 React/Vue 实战
前端·vue.js·react.js·面试·性能优化·前端框架
蓝莓味的口香糖5 小时前
【VUE】【CSS】Vue移动端适配主流方案总结
前端·css·vue.js
切糕师学AI5 小时前
el-select-v2 深度解析:用虚拟滚动解决海量数据下拉选择性能瓶颈
前端·vue.js·elementui·el-select-v2
徐小夕6 小时前
JitOffice:把办公、AI 与审批装进同一个平台
前端·vue.js·github
徐小夕6 小时前
万字分享:为什么我们要自研Word解析引擎?JitWord 解析引擎 4.0 深度复盘
前端·vue.js·github
小大宇7 小时前
Vue知识点-ElementPlus-02图标
前端·javascript·vue.js
king王一帅8 小时前
给你的编辑器加上思维导图、流程图、白板:一套开源组件,多种文档通用
前端·vue.js·ai编程