本文目录导读:

- Python方案(跨平台)
- Linux/MacOS 方案(使用xclip和xdotool)
- 使用剪贴板事件(Windows通过win32api)
- 高级版本 - 支持过滤和关键字匹配
- 配置示例 (config.json)
- 轻量化的纯Bash方案(macOS/Linux)
- 安装依赖
- 使用注意事项
Python方案(跨平台)
Windows版本
import pyperclip
import time
import threading
class ClipboardMonitor:
def __init__(self):
self.last_clipboard = ""
self.running = True
def monitor(self):
print("开始监控剪贴板...")
while self.running:
try:
current = pyperclip.paste()
if current != self.last_clipboard and current.strip():
print(f"[{time.strftime('%H:%M:%S')}] 剪贴板变化: {current[:100]}...")
# 在这里添加你需要的处理逻辑
self.on_clipboard_change(current)
self.last_clipboard = current
except Exception as e:
print(f"读取剪贴板失败: {e}")
time.sleep(0.5) # 检查间隔
def on_clipboard_change(self, text):
"""处理剪贴板新内容"""
# 示例:记录到文件
with open('clipboard_log.txt', 'a', encoding='utf-8') as f:
f.write(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] {text}\n")
def stop(self):
self.running = False
if __name__ == "__main__":
monitor = ClipboardMonitor()
try:
monitor.monitor()
except KeyboardInterrupt:
monitor.stop()
print("\n监控已停止")
更简洁的版本
import pyperclip
import time
from datetime import datetime
last_text = pyperclip.paste()
print("剪贴板监控已启动,按Ctrl+C退出")
try:
while True:
current_text = pyperclip.paste()
if current_text != last_text:
print(f"[{datetime.now().strftime('%H:%M:%S')}]")
print(f"新内容: {current_text}")
# 可选:保存到日志
with open('clipboard_history.txt', 'a', encoding='utf-8') as f:
f.write(f"[{datetime.now()}] {current_text}\n")
last_text = current_text
time.sleep(0.5)
except KeyboardInterrupt:
print("监控结束")
Linux/MacOS 方案(使用xclip和xdotool)
#!/bin/bash
# clipboard_monitor.sh
prev_clip=""
echo "开始监控剪贴板..."
while true; do
current=$(xclip -selection clipboard -o 2>/dev/null)
if [ "$current" != "$prev_clip" ] && [ -n "$current" ]; then
echo "$(date +'%Y-%m-%d %H:%M:%S') - 检测到新内容:"
echo "$current"
echo "---"
# 可选:记录到文件
echo "[$(date)] $current" >> clipboard_log.txt
prev_clip="$current"
fi
sleep 1
done
使用剪贴板事件(Windows通过win32api)
import win32api
import win32con
import os
import time
class WindowsClipboardMonitor:
def __init__(self):
self.hwnd = None
self.last_count = 0
def monitor_clipboard_sequence(self):
"""监控Windows剪贴板序列号"""
print("Windows剪贴板监控启动...")
while True:
try:
# 获取当前剪贴板序列号
count = win32clipboard.GetClipboardSequenceNumber()
if count != self.last_count:
self.last_count = count
self.get_clipboard_content()
time.sleep(0.5)
except Exception as e:
print(f"监控错误: {e}")
def get_clipboard_content(self):
"""获取剪贴板内容"""
import win32clipboard
try:
win32clipboard.OpenClipboard()
if win32clipboard.IsClipboardFormatAvailable(win32con.CF_TEXT):
data = win32clipboard.GetClipboardData()
if data:
text = data.decode('utf-8', errors='ignore')
print(f"检测到新剪贴板内容: {text[:200]}")
finally:
win32clipboard.CloseClipboard()
# 运行
if __name__ == "__main__":
monitor = WindowsClipboardMonitor()
monitor.monitor_clipboard_sequence()
高级版本 - 支持过滤和关键字匹配
import pyperclip
import time
import re
import json
from pathlib import Path
from datetime import datetime
class SmartClipboardMonitor:
def __init__(self, config_file='config.json'):
self.last_clipboard = ""
self.config = self.load_config(config_file)
self.keywords = self.config.get('keywords', [])
self.log_file = Path(self.config.get('log_file', 'clipboard_log.txt'))
self.ignore_patterns = self.config.get('ignore_patterns', [])
def load_config(self, config_file):
"""加载配置文件"""
if Path(config_file).exists():
with open(config_file, 'r', encoding='utf-8') as f:
return json.load(f)
return {}
def should_ignore(self, text):
"""检查是否需要忽略的内容"""
for pattern in self.ignore_patterns:
if re.search(pattern, text):
return True
return False
def process_clipboard(self, text):
"""处理剪贴板内容"""
# 检查关键词
if self.keywords:
matched = [kw for kw in self.keywords if kw.lower() in text.lower()]
if matched:
print(f"匹配到关键词: {matched}")
self.save_to_file(text, keyword_match=True)
else:
self.save_to_file(text)
def save_to_file(self, text, keyword_match=False):
"""保存到日志文件"""
with open(self.log_file, 'a', encoding='utf-8') as f:
timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
tag = "[关键词匹配]" if keyword_match else ""
f.write(f"\n--- {timestamp} {tag} ---\n{text}\n")
def run(self):
"""启动监控"""
print("智能剪贴板监控已启动")
print(f"关键词: {self.keywords if self.keywords else '无'}")
print(f"日志文件: {self.log_file}")
print("按Ctrl+C退出")
try:
while True:
current = pyperclip.paste()
if current != self.last_clipboard and current.strip():
if not self.should_ignore(current):
self.process_clipboard(current)
print(f"[{datetime.now().strftime('%H:%M:%S')}] 检测到新内容")
self.last_clipboard = current
time.sleep(0.5)
except KeyboardInterrupt:
print("\n监控已停止")
# 使用示例
if __name__ == "__main__":
monitor = SmartClipboardMonitor()
monitor.run()
配置示例 (config.json)
{
"keywords": ["password", "邮箱", "重要"],
"ignore_patterns": ["^\\s*$"],
"log_file": "clipboard_log.txt"
}
轻量化的纯Bash方案(macOS/Linux)
#!/bin/bash
# 使用pbpaste (macOS) 或 xclip (Linux)
get_clipboard() {
if [[ "$(uname)" == "Darwin" ]]; then
pbpaste
else
xclip -selection clipboard -o 2>/dev/null
fi
}
echo "剪贴板监控开始 (按Ctrl+C停止)"
prev_content=""
while true; do
content=$(get_clipboard) 2>/dev/null
if [[ "$content" != "$prev_content" && -n "$content" ]]; then
echo ""
echo "=== 检测到新内容 $(date '+%H:%M:%S') ==="
echo "$content" | head -10 # 只显示前10行
# 保存到文件
{
echo ""
echo "[$(date '+%Y-%m-%d %H:%M:%S')]"
echo "$content"
echo "------------------------"
} >> clipboard_log.txt
prev_content="$content"
fi
sleep 1
done
安装依赖
# Python依赖 pip install pyperclip # Windows额外依赖 pip install pywin32 # Linux需要安装xclip sudo apt-get install xclip
使用注意事项
- 错误处理:某些程序会频繁更新剪贴板,建议添加延迟
- 敏感信息:监控密码等敏感信息时要谨慎
- 性能:高频监控会消耗资源,建议设置合理间隔
- 退出机制:确保有优雅的退出方式(Ctrl+C)
选择哪个方案取决于你的操作系统和具体需求,最简单的入门方案是使用Python + pyperclip。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播