Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >[开发日志] Windows 剪贴板记录工具

[开发日志] Windows 剪贴板记录工具

原创
作者头像
阿尔的代码屋
修改于 2025-01-03 12:53:10
修改于 2025-01-03 12:53:10
13403
代码可运行
举报
运行总次数:3
代码可运行

项目地址:Clipboard Recorder

Clipboard Recorder 可以记录各种类型的剪贴板内容

💡 背景思考

在我日常使用Windows自带的粘贴板的过程中,偶然间想到:

  1. 🔐 Windows粘贴板安全性的缺失:Windows系统的剪贴板是一个完全开放的系统资源,任何运行中的程序都可以自由访问。这就意味着,当我们复制了密码、私钥等敏感信息时,可能有恶意程序正在默默记录这些内容,存在较大的安全隐患。
  2. 📝 日常使用过程中历史记录的需求:在日常工作中,我们经常需要找回之前复制过的内容。但Windows默认的剪贴板只能保存最新一条记录,虽然Windows 10引入了历史记录功能,但在使用上仍有诸多限制。

正是基于这两点思考,我开发了Clipboard Recorder工具。它不仅能帮助用户直观地了解剪贴板的安全风险,也提供了完整的历史记录查询功能。

✨ 功能特性

安全警示

  • 实时监控剪贴板变化
  • 记录所有类型的剪贴板内容(文本、图片、文件路径)
  • 展示每条内容的详细格式信息
  • 自动保存完整的操作历史

实用功能

  • 按日期组织历史记录
  • 支持图片的多种保存方式
  • 智能去重避免重复记录
  • 高度可配置的行为控制

🔧 技术实现

核心架构

项目采用模块化设计,主要包含以下组件:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
src/
├── monitor.py    # 核心监控逻辑
├── logger.py     # 日志管理
├── config.py     # 配置管理
├── models.py     # 数据模型
└── constants.py  # 常量定义

关键技术点

剪贴板监控
代码语言:python
代码运行次数:0
运行
AI代码解释
复制
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
内容去重
代码语言:python
代码运行次数:0
运行
AI代码解释
复制
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()
    # ... 其他类型的处理
安全存储
代码语言:python
代码运行次数:0
运行
AI代码解释
复制
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

🤔 开发过程中的思考

安全性考虑

  • 避免在内存中长期保留敏感信息
  • 提供配置选项控制内容存储方式
  • 清晰的日志记录便于审计

性能优化

  • 使用文件句柄缓存
  • 智能的内容检测机制
  • 异步写入避免阻塞

用户体验

  • 友好的控制台输出
  • 灵活的配置选项
  • 直观的日志格式

📖 使用方法

  1. 安装依赖pip install -r requirements.txt
  2. 运行程序python main.py
  3. 查看历史记录
  4. 日志文件位于 logs 目录
  5. 图片文件位于 logs/images 目录
  6. 每天的记录单独存储在一个 JSON 文件中

🚀 TODO 列表

功能增强计划

  • 支持内容搜索功能,方便查找历史记录
  • 添加内容分类功能,更好地组织历史记录
  • 支持更多剪贴板格式的解析
  • 提供数据导入导出功能

📌 结语

开发这个工具的过程让我深入思考了很多关于安全性和隐私的问题。在便利性和安全性之间找到平衡点并不容易,但这正是我们作为开发者需要不断思考和改进的地方。

希望这个工具能够帮助更多人意识到剪贴板安全的重要性,同时也能在实际使用中带来便利。欢迎大家在 GitHub 上提出建议和贡献代码。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
红队之剪贴板历史记录提取工具
作为红队成员,检索剪贴板数据以获取敏感信息(例如密码)是常见的做法。然而,传统上只能提取最新的25条剪贴板数据,如SharpClipHistory项目。
潇湘信安
2023/12/04
3420
红队之剪贴板历史记录提取工具
windows 下使用 python3 复制拷贝图片到剪切板(剪贴板、粘贴板)
windows 下,使用 python3 把图片 拷贝/复制 到 系统的剪贴板/剪切板/粘贴板
卓越笔记
2023/02/17
2.1K0
Paste for Mac(剪贴板历史记录工具)
Paste for Mac是一款功能强大的剪贴板历史记录工具,它可以让您在不同应用程序之间轻松复制和粘贴多个项目。Paste可以存储任何类型的剪贴板内容,并提供了快速搜索、标签、格式转换和编辑工具,以便您能够更有效地组织和管理您的剪贴板历史记录。该软件还可以自动识别和保存您最常使用的项,并支持iCloud同步,使您可以在所有设备上共享剪贴板历史记录。
快乐的小丸子
2023/04/09
2.2K0
剪贴板操作 Clipboard API 教程
一般来说,脚本不应该改动用户的剪贴板,以免不符合用户的预期。但是,有些时候这样做确实能够带来方便,比如"一键复制"功能,用户点击一下按钮,指定的内容就自动进入剪贴板。
ruanyf
2021/01/21
2.4K0
ClipboardAction for mac(剪贴板管理工具) v1.5.3激活版
Clipboard Action Mac版允许剪贴板历史中的每一段内容执行操作。使用AppleScript或Automator工作流定义您的定制操作,或者使用默认的应用程序操作。
浅巷墨漓cc
2022/11/23
8000
python 多重剪贴板 脚本
该程序将利用一个关键字保存每段剪贴板文本。例如,当运行py mcb.pyw save spam,剪贴板中当前的内容就用关键字spam 保存。通过运行py mcb.pyw spam,这 段文本稍后将重新加载到剪贴板中。如果用户忘记了都有哪些关键字,他们可以运 行py mcb.pyw list,将所有关键字的列表复制到剪贴板中。 如果使用Windows,可以创建一个名为mcb.bat 的批处理文件,很容易地通 过“Run…”窗口运行这个脚本。该批处理文件包含如下内容: @pyw.exe C:\Python34\mcb.pyw %*
用户5760343
2022/05/13
7320
免费的跨平台剪贴板工具,超好用!
在日常的工作中,我们会频繁地使用复制和粘贴功能来处理各种信息。不知道你是不是也遇到过和了不起一样的烦恼:在处理多个任务时,需要来回切换窗口以找到之前复制的内容。这时,一款高效的剪贴板管理工具就显得尤为重要。
永恒君
2024/09/18
4980
免费的跨平台剪贴板工具,超好用!
Windows复制粘贴太拉垮?这款剪贴板利器太香了!
Win10 系统自带了一个剪贴板工具,可以保存剪贴板历史记录。但是其功能比较简陋,并且记录会在关机后清除,很不方便。
永恒君
2022/12/07
1.9K0
Windows复制粘贴太拉垮?这款剪贴板利器太香了!
JavaScript 剪贴板 Clipboard 的那些事儿!
携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第19天,点击查看活动详情
掘金安东尼
2022/09/22
1.5K0
JavaScript 剪贴板 Clipboard 的那些事儿!
Unclutter for mac(剪贴板文件笔记快捷工具)
Unclutter 是一款适用于 macOS 系统的工具,可以帮助用户快速访问剪贴板历史记录、文件和笔记等信息。该软件提供了简洁直观的界面和丰富的功能,支持多种操作方式和快捷键,并具有高度的可定制性和灵活性。 Unclutter 的主要特点如下: - 可以轻松访问剪贴板历史记录,方便用户查看和使用复制的内容。 - 支持拖放文件和文件夹到 Unclutter 中进行快速存储和访问。 - 可以在 Unclutter 中创建和编辑笔记,方便用户记录和管理重要信息。 - 支持自定义设置启动位置、透明度等外观选项,让用户可以根据需求进行灵活配置。 - 支持多种快捷键和手势操作,方便用户快速访问和切换 Unclutter 界面。 - 支持与 Finder、TextEdit、Terminal 等常用应用程序集成使用。 总之,Unclutter 是一款非常实用的桌面工具,适合需要快速访问剪贴板历史记录、文件和笔记等信息的用户使用,具有简洁直观的界面和丰富的功能,可以大大提高用户的生产力和效率。
用户10121095
2023/05/08
4520
剪贴板被占用导致应用使用剪贴板拷贝内容失败抛出 COMException 0x800401D0 错误
本文记录某些软件,例如 向日葵远程控制 软件占用剪贴板,导致 WPF 应用使用剪贴板拷贝内容和设置剪贴板时,抛出 System.Runtime.InteropServices.COMException (0x800401D0): OpenClipboard 失败 (0x800401D0 (CLIPBRD_E_CANT_OPEN)) 异常
林德熙
2023/04/07
1.8K0
JS浏览器环境下各种实用API记录
Clipboard API 是下一代的剪贴板操作方法,比传统的document.execCommand()方法更强大、更合理。
房东的狗丶
2023/02/17
8890
使用 JS 剪贴板 API
使用 JS 剪贴板 API 现在的状况 一般情况下我们会在网页上使用大量的3复制粘贴的操作。 但是也可以看到在 360文库中的禁止复制粘贴或者知乎的那样复制粘贴的时候会自动带有一段文字的版权声明。 C
西南_张家辉
2021/02/02
4.4K0
Android 系统剪贴板的使用 - 复制、获取和清空
ClipboardManager: 表示一个剪贴板 ClipData: 剪贴板中保存的所有剪贴数据集(剪贴板可同时复制/保存多条多种数据条目) ClipData.Item: 剪贴数据集中的一个数据条目 复制内容 /** * 实现文本复制功能 * * @param content 复制的文本 */ public static void copy(String content) { if (!TextUtils.isEmpty(content)) { // 得到剪贴板管理器
Jingbin
2019/04/25
6.3K0
Canvas简历编辑器-我的剪贴板里究竟有什么数据
在这里我们先来聊聊我们究竟应该如何操作剪贴板,也就是我们在浏览器的复制粘贴事件,并且在此基础上聊聊我们在Canvas图形编辑器中应该如何控制焦点以及如何实现复制粘贴行为。
WindRunnerMax
2024/05/08
1940
开源一款剪贴板跨设备共享工具
昨天遇到了一个很棘手的问题:我的手机剪贴板需要同步到另外的两台设备上。遗憾的是手机上并没有安装相同的通讯软件。用网上免费的剪贴板共享工具吧,方便是方便,但是觉得还是不安全,关键是不能实现特定的需求。我很享受DIY的过程,于是思索一下,我觉得我可以自己做出来,还能做到局域网下的剪贴板跨设备共享,毕竟我也曾有过成功的案例:开源一个局域网文件共享工具。于是说干就干。
shigen
2024/03/31
3270
万恶的剪贴板==》为存储而生
近几天逆天经常大量复制粘贴一些图文信息,在某些特定的场合,图片都是无法直接粘贴进去的,就比如博客园的编辑器。 源码:https://github.com/dunitian/DNTLive/tree/master/Software/万恶剪贴板 要弄个什么还要把word里面的图片或者网上的图片先弄出来,这是多么的蛋疼啊~ 于是就有了万恶的剪贴板==》为存储而生 其实是个很简单的功能点==》稍微说下核心代码 获取文本内容:var dataStr = Clipboard.GetText(); 获取单个图片:var
逸鹏
2018/04/10
6870
跨浏览器的剪贴板访问解决方案
在IE中,JS可以直接访问剪贴板,但是firefox,chrome等其它"高级"浏览器,就没这么幸运了。网上流传的所谓兼容firefox/IE的剪贴板访问javascript代码,都是N年前的往事了。 根据http://mozilla.com.cn/post/49413/ 上的说法: ---------------------------------- 火狐不允许网页操作用户的剪切板,因为有安全问题,网页可能盗用你复制的密码等等。 以前可以通过修改设置提权,允许网页获得高权限,操作剪切板,目前火狐已经取消了
菩提树下的杨过
2018/01/24
2.1K0
跨浏览器的剪贴板访问解决方案
通过JS实现剪贴板操作
在网上找到很多种方法,ZeroClipboard.js、clipboard.js 插件等,但是都没有办法解决本人项目中的问题,最后发现可以通过 navigator 对象得到 clipboard,进行剪切板操作
赤蓝紫
2023/01/02
2.8K0
通过JS实现剪贴板操作
win10 UWP 剪贴板 Clipboard 设置文本获取文本获取图片获取文件
win10 UWP 剪贴板 Clipboard使用Windows.ApplicationModel.DataTransfer.Clipboard,提供 UWP 与其他程序的通信,目标程序可以使用 UWP 程序也可以使用以前的程序。
林德熙
2018/09/18
2.2K0
相关推荐
红队之剪贴板历史记录提取工具
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验