+
35
-

回答

试试下面代码

"""
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()

网友回复

我知道答案,我要回答