python操作剪切板clipboard

import os
import subprocess
from Quartz import (
    NSPasteboard,
    NSPasteboardTypePNG,
    NSPasteboardTypeTIFF,
    NSPasteboardTypeString,
)

# 获取剪贴板中的数据
pasteboard = NSPasteboard.generalPasteboard()
image_data = None
text_data = None

if pasteboard.availableTypeFromArray_([NSPasteboardTypePNG]):
    image_data = pasteboard.dataForType_(NSPasteboardTypePNG)
elif pasteboard.availableTypeFromArray_([NSPasteboardTypeTIFF]):
    image_data = pasteboard.dataForType_(NSPasteboardTypeTIFF)

# 如果剪贴板中没有图像数据,尝试获取文本数据
if not image_data:
    text_data = pasteboard.stringForType_(NSPasteboardTypeString)

if image_data:
    # 指定保存路径
    save_directory = "/Users/shaun/Documents/clipboard/"

    # 列出目标文件夹中的所有文件
    existing_files = os.listdir(save_directory)

    # 查找已存在文件名中的最大序号
    max_number = 0
    for file_name in existing_files:
        if file_name.endswith(".png"):
            try:
                number = int(file_name.split(".")[0])
                max_number = max(max_number, number)
            except ValueError:
                pass

    # 下一个文件名序号
    next_number = max_number + 1

    # 构建新文件名
    file_name = f"{next_number}.png"
    save_path = os.path.join(save_directory, file_name)

    # 保存图像数据到文件
    with open(save_path, "wb") as f:
        f.write(image_data)

    # 通知用户图像已保存
    print(f"Image saved as {file_name}")

    # 打开资源目录
    subprocess.Popen(["open", save_directory])

elif text_data:
    # 指定保存路径
    save_directory = "/Users/shaun/Documents/clipboard/"

    # 列出目标文件夹中的所有文件
    existing_files = os.listdir(save_directory)

    # 查找已存在文件名中的最大序号
    max_number = 0
    for file_name in existing_files:
        if file_name.endswith(".txt"):
            try:
                number = int(file_name.split(".")[0])
                max_number = max(max_number, number)
            except ValueError:
                pass

    # 下一个文件名序号
    next_number = max_number + 1

    # 构建新文件名
    file_name = f"{next_number}.txt"
    save_path = os.path.join(save_directory, file_name)

    # 保存文本数据到文件
    with open(save_path, "w") as f:
        f.write(text_data)

    # 通知用户文本文件已保存
    # print(f"Text file saved as {file_name}")

    # 打开资源目录
    subprocess.Popen(["open", save_directory])

# else:
#     # 剪切板中既没有图像数据也没有文本数据时,通知用户
#     print("No image or text found on the clipboard")
posted @ 2023-09-27 18:24  Journey&Flower  阅读(40)  评论(0)    收藏  举报