自动监控系统剪贴板,记录文本和图片的复制历史。 纯本地存储,隐私安全 —— 你的数据永远只在你自己的电脑上。
| 特性 | 说明 |
|---|---|
| 🔍 全自动监控 | 文本、图片、链接、代码 —— 复制即记录,无需手动操作 |
| 🔒 纯本地存储 | SQLite 单文件数据库,数据绝不上传,离线可用 |
| 🎨 极简设计 | 黑白灰配色,暗色/亮色自动切换(早6点亮色,晚6点暗色) |
| ⚡ 实时推送 | SSE(Server-Sent Events)即时通知,新内容零延迟出现 |
| 📌 收藏置顶 | 重要内容一键标星,永久保留不被自动清理 |
| 🔄 一键回拷 | 点击任意历史记录,瞬间回到剪贴板 |
| 📊 统计面板 | 总条数、类型分布、每日趋势一目了然 |
| 📤 数据导出 | 支持 TXT / JSON / Markdown 格式导出 |
| 🪟 原生桌面 | 基于 pywebview + Edge WebView2,无边框 Liquid Glass 风格 |
| 📦 系统托盘 | 关闭窗口 → 隐藏到托盘,后台持续监控 |
| 🧹 自动清理 | 超过 30 天的非收藏记录自动清除,节省磁盘空间 |
- Python 3.9+
- Windows 10/11(macOS/Linux 可通过浏览器模式运行)
pip install -r requirements.txt核心依赖(必装):
| 包 | 用途 |
|---|---|
flask |
Web 框架,提供 API 和页面服务 |
pyperclip |
跨平台剪贴板文本读写 |
Pillow |
图片捕获 + 缩略图生成 |
可选依赖(装了体验更好):
| 包 | 用途 | 效果 |
|---|---|---|
pywebview |
原生桌面窗口 | 无边框窗口 + 系统托盘 |
pystray |
系统托盘图标 | 关闭即隐藏,右键菜单操作 |
# 一键安装全部(含可选依赖)
pip install flask pyperclip Pillow pywebview pystraypython clipboard_app.py浏览器会自动打开 http://127.0.0.1:8742。
Windows 用户也可以直接双击 启动剪贴板.bat(后台静默启动,不弹命令行窗口)。
python clipboard_app.py --port 9999 # 自定义端口
python clipboard_app.py --no-browser # 不自动打开浏览器
python clipboard_app.py --no-tray # 不显示系统托盘图标
python clipboard_app.py --interval 1000 # 自定义轮询间隔(毫秒)
python clipboard_app.py --retention 60 # 数据保留 60 天
python clipboard_app.py --ontop # 启动时窗口置顶悬浮┌─────────────────────────────────────────────────┐
│ 剪贴板管家 │
│ │
│ ┌──────────────┐ ┌──────────────────────┐ │
│ │ ClipboardMonitor │ │ Flask Web Server │ │
│ │ (后台守护线程) │ │ (127.0.0.1:8742) │ │
│ │ │ │ │ │
│ │ 每 500ms 轮询 │ │ / → UI 页面 │ │
│ │ 剪贴板变化 │ │ /api/items → 记录CRUD│ │
│ │ ↓ │ │ /api/stats → 统计面板│ │
│ │ 写入 SQLite │ │ /api/export → 导出 │ │
│ └──────┬───────────┘ └───────────┬──────────┘ │
│ │ │ │
│ └──────────┬──────────────────┘ │
│ ↓ │
│ ┌──────────────────┐ │
│ │ SQLite DB │ │
│ │ (clipboard.db) │ │
│ │ + 图片文件存储 │ │
│ └──────────────────┘ │
│ ↓ │
│ ┌──────────────────┐ │
│ │ SSE 实时推送 │ │
│ │ 前端即时刷新 │ │
│ └──────────────────┘ │
└─────────────────────────────────────────────────────┘
为什么用轮询而非 Hook? Windows 剪贴板 Hook 需要消息循环 + C 扩展,复杂且容易内存泄漏。500ms 轮询的 CPU 占用 < 0.1%,用户完全无感知,且跨平台兼容。
为什么用 SQLite 而非文件存储? 支持索引加速搜索、事务保证一致性、单文件零配置。月均 1500 条记录下 LIKE 查询 < 10ms。
为什么用 SSE 而非 WebSocket? SSE 更轻量,单向推送即可满足需求(只需服务器通知客户端有新数据),不需要 WebSocket 的双向通信复杂度。
为什么用 pywebview 而非 Electron? pywebview 利用系统自带的 Edge WebView2,打包体积 ~5MB。Electron 内置 Chromium,打包 ~200MB,对一个小工具来说太重了。
clipboard-keeper/
├── clipboard_app.py # 主程序(单文件,所有后端逻辑)
├── clipboard_ui.html # 前端 UI(纯 HTML/CSS/JS,零框架)
├── requirements.txt # Python 依赖
├── 启动剪贴板.bat # Windows 一键启动脚本
├── README.md # 你正在看的这个
├── LICENSE # MIT 开源协议
├── screenshots/ # 截图(可选)
└── clipboard_data/ # 运行时自动生成(已在 .gitignore 中忽略)
├── clipboard.db # SQLite 数据库
└── images/ # 剪贴板图片 + 缩略图
| 快捷键 | 功能 |
|---|---|
Ctrl + K |
聚焦搜索框 |
Esc |
关闭图片预览弹窗 |
欢迎提 Issue 和 PR!
- Fork 本项目
- 创建特性分支 (
git checkout -b feature/amazing-feature) - 提交更改 (
git commit -m 'Add amazing feature') - 推送到分支 (
git push origin feature/amazing-feature) - 创建 Pull Request
MIT © 2025 — 自由使用、修改、分发。详见 LICENSE。
用 ❤️ 和 Python 写成 | 隐私优先,永不上传
