作者:阿尔的代码屋
项目地址:Clipboard Recorder
Clipboard Recorder 可以记录各种类型的剪贴板内容
💡 背景思考
在我日常使用Windows自带的粘贴板的过程中,偶然间想到:
- 🔐 Windows粘贴板安全性的缺失:Windows系统的剪贴板是一个完全开放的系统资源,任何运行中的程序都可以自由访问。这就意味着,当我们复制了密码、私钥等敏感信息时,可能有恶意程序正在默默记录这些内容,存在较大的安全隐患。
- 📝 日常使用过程中历史记录的需求:在日常工作中,我们经常需要找回之前复制过的内容。但Windows默认的剪贴板只能保存最新一条记录,虽然Windows 10引入了历史记录功能,但在使用上仍有诸多限制。
正是基于这两点思考,我开发了Clipboard Recorder工具。它不仅能帮助用户直观地了解剪贴板的安全风险,也提供了完整的历史记录查询功能。
✨ 功能特性
安全警示
- 实时监控剪贴板变化
- 记录所有类型的剪贴板内容(文本、图片、文件路径)
- 展示每条内容的详细格式信息
- 自动保存完整的操作历史
实用功能
- 按日期组织历史记录
- 支持图片的多种保存方式
- 智能去重避免重复记录
- 高度可配置的行为控制
🔧 技术实现
核心架构
项目采用模块化设计,主要包含以下组件:
src/
├── monitor.py # 核心监控逻辑
├── logger.py # 日志管理
├── config.py # 配置管理
├── models.py # 数据模型
└── constants.py # 常量定义
关键技术点
剪贴板监控
def _read_clipboard(self) -> Optional[ClipboardContent]:
"""读取剪贴板内容"""
try:
content = ClipboardContent()
content.formats = self._get_clipboard_formats()
# 按优先级尝试读取不同类型的内容
return (self._read_image_content(content) or
self._read_text_content(content) or
self._read_file_paths(content))
except Exception as e:
print(Messages.Error.MONITOR_ERROR.format(str(e)))
return None
内容去重
def _get_last_entry_hash(self, last_entry: Dict[str, Any]) -> Optional[str]:
"""计算最后一条记录的哈希值"""
content_type = last_entry.get(JsonKeys.CONTENT_TYPE)
if content_type == ContentType.TEXT.value and JsonKeys.TEXT_CONTENT in last_entry:
return hashlib.md5(last_entry[JsonKeys.TEXT_CONTENT].encode('utf-8')).hexdigest()
# ... 其他类型的处理
安全存储
def _process_image_data(self, content: ClipboardContent, data_dict: dict) -> dict:
"""处理图片数据,支持文件存储和 Base64 编码"""
if content.content_type != ContentType.IMAGE.value:
return data_dict
image_path = self._save_image(content)
if image_path:
data_dict[JsonKeys.IMAGE_PATH] = image_path
if self._config.get(ConfigKeys.Logging.SECTION, ConfigKeys.Logging.SAVE_IMAGE_BASE64):
data_dict[JsonKeys.IMAGE_BASE64] = content.data[JsonKeys.IMAGE_DATA]
return data_dict
🤔 开发过程中的思考
安全性考虑
- 避免在内存中长期保留敏感信息
- 提供配置选项控制内容存储方式
- 清晰的日志记录便于审计
性能优化
- 使用文件句柄缓存
- 智能的内容检测机制
- 异步写入避免阻塞
用户体验
- 友好的控制台输出
- 灵活的配置选项
- 直观的日志格式
📖 使用方法
安装依赖
pip install -r requirements.txt
运行程序
python main.py
- 查看历史记录
- 日志文件位于
logs
目录 - 图片文件位于
logs/images
目录 - 每天的记录单独存储在一个 JSON 文件中
🚀 TODO 列表
功能增强计划
- [ ] 支持内容搜索功能,方便查找历史记录
- [ ] 添加内容分类功能,更好地组织历史记录
- [ ] 支持更多剪贴板格式的解析
- [ ] 提供数据导入导出功能
📌 结语
开发这个工具的过程让我深入思考了很多关于安全性和隐私的问题。在便利性和安全性之间找到平衡点并不容易,但这正是我们作为开发者需要不断思考和改进的地方。
希望这个工具能够帮助更多人意识到剪贴板安全的重要性,同时也能在实际使用中带来便利。欢迎大家在 GitHub 上提出建议和贡献代码。
也欢迎关注我的微信公众号【阿尔的代码屋】,获取更多技术干货和编程心得。我会定期分享:
- 编程技术文章
- 开发工具使用技巧
- 实用项目经验
- 个人成长心得
扫描上方二维码即可关注,一起交流学习~
本文由 阿尔的代码屋 原创发布,转载请注明出处。 ©️
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。