试试下面代码
"""
Ctrl+V 捕获剪贴板图片
在 CMD 中运行后,按 Ctrl+V 即可将剪贴板中的图片保存到文件
按 Esc 退出程序
"""
import os
import time
from datetime import datetime
from pathlib import Path
from PIL import ImageGrab
import keyboard
# ========== 配置 ==========
SAVE_DIR = Path("clipboard_images") # 保存目录
PREFIX = "img" # 文件名前缀
FORMAT = "png" # 保存格式: png / jpg / bmp
# ===========================
SAVE_DIR.mkdir(exist_ok=True)
last_hash = None # 防止重复保存同一张图片
def on_ctrl_v():
global last_hash
# 小延迟,等系统完成剪贴板写入
time.sleep(0.15)
img = ImageGrab.grabclipboard()
if img is None:
print(" 剪贴板中没有图片,跳过。")
return
# 去重:同一张图片不重复保存
raw = img.tobytes()
current_hash = hash(raw)
if current_hash == last_hash:
print(" 图片未变化,跳过。")
return
last_hash = current_hash
# 生成文件名
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"{PREFIX}_{timestamp}.{FORMAT}"
filepath = SAVE_DIR / filename
img.save(filepath, quality=95 if FORMAT == "jpg" else None)
print(f" ✓ 已保存: {filepath.resolve()}")
print(f" 尺寸: {img.size[0]}x{img.size[1]} | 模式: {img.mode}")
def main():
print("=" * 50)
print(" 剪贴板图片捕获工具")
print("=" * 50)
print(f" 保存目录: {SAVE_DIR.resolve()}")
print(f" 格式: {FORMAT}")
print()
print(" [Ctrl+V] 捕获剪贴板图片")
print(" [Esc] 退出程序")
print("=" * 50)
print()
print("等待 Ctrl+V ...")
# 注册全局热键
keyboard.add_hotkey("ctrl+v", on_ctrl_v, suppress=False)
# 阻塞等待 Esc 退出
keyboard.wait("esc")
print("\n已退出。")
if __name__ == "__main__":
main() 网友回复


