Python 剪贴板增强:如何自动保存内容到指定文件

Python 如何监控剪贴板,使得复制的内容可以自动保存到指定的文件


Python 剪贴板增强:如何自动保存内容到指定文件
12 回复

pip install pyperclip

python<br>from pyperclip import copy, paste<br><br>copy('2333') # 向剪贴板写入 2333<br><br>paste() # 值为剪贴板中的内容<br>


这个需求很实用,核心就是用 pyperclip 监听剪贴板变化,然后把内容追加到文件里。下面是一个完整的实现:

import pyperclip
import time
from datetime import datetime
import threading

class ClipboardMonitor:
    def __init__(self, file_path="clipboard_history.txt"):
        self.file_path = file_path
        self.last_clipboard = ""
        self.running = True
        
    def save_to_file(self, content):
        """将内容追加保存到文件"""
        timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        with open(self.file_path, 'a', encoding='utf-8') as f:
            f.write(f"[{timestamp}]\n{content}\n")
            f.write("-" * 50 + "\n\n")
        print(f"已保存剪贴板内容到 {self.file_path}")
    
    def monitor(self):
        """监控剪贴板变化"""
        print("开始监控剪贴板... (按Ctrl+C停止)")
        try:
            while self.running:
                current_clipboard = pyperclip.paste()
                if current_clipboard != self.last_clipboard and current_clipboard.strip():
                    self.save_to_file(current_clipboard)
                    self.last_clipboard = current_clipboard
                time.sleep(0.5)  # 检查间隔
        except KeyboardInterrupt:
            print("\n监控已停止")
        except Exception as e:
            print(f"发生错误: {e}")
    
    def start(self):
        """启动监控线程"""
        thread = threading.Thread(target=self.monitor, daemon=True)
        thread.start()
        return thread

# 使用示例
if __name__ == "__main__":
    # 指定保存文件路径,默认是当前目录的 clipboard_history.txt
    monitor = ClipboardMonitor("my_clipboard_log.txt")
    
    # 启动监控(会在后台运行)
    monitor.start()
    
    # 保持主线程运行
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        monitor.running = False
        print("程序退出")

安装依赖:

pip install pyperclip

代码说明:

  1. pyperclip.paste() 获取当前剪贴板内容
  2. 通过比较判断内容是否变化,避免重复保存
  3. 添加时间戳方便追踪
  4. 使用线程在后台监控,不影响其他操作
  5. 按 Ctrl+C 可以停止程序

扩展建议:

  • 可以加个过滤,只保存特定类型的内容(比如只保存链接)
  • 可以改成保存到数据库,方便查询
  • 可以加个GUI设置保存路径和开关

一句话总结:用 pyperclip 轮询剪贴板,变化了就写入文件。

感谢评论,自动监听剪贴板,一有新的内容自动粘贴到记事本里

放狗没找到,你前面说的那个我懂,我不是伸手党

那就暴力一点,每 0.5 秒对比一下

Windows 上可以使用 pywin32,具体的模块叫 win32clipboard

win7 + py3
>>> print(paste())
paste()#为什么不是 2333

我也觉得,轮询就行了。虽然有点糙!!

不知道剪贴板支持事件被动触发不

说到底就是 Windows API Hook,跟 python 毛关系都没有。。。。

https://www.codeproject.com/Articles/19858/Global-Windows-Hooks

这种东西明显得根据不同的操作系统来,设计到具体系统的 API。另外,如果搜索的话,你确实可以找到所有需要的内容

https://www.google.com/search?q=windows+api+monitor+clipboard+change
https://msdn.microsoft.com/en-us/library/windows/desktop/ms649016(v=vs.85).aspx#dataxchg_Monitoring_Clipboard_Contents

确定对应方式的 API,然后 pywin32 或者 ctypes 调用对应 API 就行了。找不到是因为选择的关键字不对,真的没啥可以骄傲的。

我的 win10+py3.61 是可以的

回到顶部