桌面挂件怎么做才不烦人
2026-10-12 · 桌面开发
桌面挂件的第一原则不是"好看",是**不打扰**。用户装着它,然后忘掉它, 但想起来的时候它一直都在。这条原则会反过来决定技术方案。
一、点击必须穿透
挂件浮在桌面最上层,如果它吃掉鼠标点击,用户点自己桌面就会被挡住。
做法是用 Electron 的 setIgnoreMouseEvents(true, { forward: true }),
让窗口变成透明的"洞",鼠标下面该点什么都正常。
但反过来,用户又需要能点到核桃(左键盘它、右键打开收藏柜)。 所以要根据光标位置动态切换:
// 光标在核桃上 → 可点;不在 → 穿透
const over = hitTest(cursorX, cursorY);
win.setIgnoreMouseEvents(!over, { forward: true });
这里有个细节:两个核桃之间的缝隙也要算作可点区域, 否则中间会留一条几像素的"死缝",右键会漏到桌面上。
二、不用管理员权限
很多桌面挂件要读全局鼠标,就直接上驱动或者申请提权。这对用户是很大的心理负担, 而且很容易被杀软拦。
我用的两个普通权限方案:
- 光标位置:定时读取系统光标坐标(约 30 次/秒),不需要任何权限
- 鼠标按键:用
uiohook-napi做全局监听,普通用户权限即可
键盘一个键都不读。少读一类输入,就少一类安全风险,也少一堆解释成本。
三、空闲时几乎不渲染
挂件会一直开着。如果它以 60 fps 渲染,笔记本电池会明显受影响。 现在的策略:
- 空闲:约 4 fps,只做很慢的呼吸动画
- 鼠标悬停:60 fps,给即时反馈
- 画面状态没变时:直接跳过这一帧
最后一招很有效:把"这一帧要画什么"量化成一个字符串签名, 和上一帧相同就不渲染。实测空闲 CPU 从几个百分点降到 1% 左右。
四、数据只留在本地
挂件记录的是鼠标活动,这类数据很敏感。所以从一开始就没做账号、没做上传、没做遥测。 存档就是一个 JSON 文件,用户可以自己打开看,也可以直接删掉。
五、卸载要干净
绿色版是我最后选的分发方式:解压即用,数据放在程序旁边的 PantaData 目录,
删掉文件夹就彻底干净。没有注册表、没有系统目录残留。
另外,卸载时**不要删用户的存档**——那是几个月攒出来的东西。 重装应该是"接着养",不是"从头开始"。
相关项目:盘它