python实现图片复制到粘贴板

我的代码使用的方案,没有使用bmp的方案,可以解决在复制png的图片时,如果转成bmp格式会导致图片质量变大的情况
 

import win32clipboard
import win32con
import struct
import sys

def copy_files_to_clipboard(file_paths):
    """
    将文件路径列表复制到剪贴板,实现类似“复制文件”操作。
    
    参数:
      file_paths: 文件路径字符串列表(需要使用绝对路径)
    """
    # 构造文件列表字符串:
    # 每个文件路径后面以 '\0' 结束,最后再添加一个额外的 '\0'
    file_list = "\0".join(file_paths) + "\0\0"
    # Windows 剪贴板要求使用 Unicode 格式(utf-16le 编码)
    file_list_bytes = file_list.encode("utf-16le")
    
    # 构造 DROPFILES 结构体
    # 结构体定义:
    # typedef struct _DROPFILES {
    #   DWORD pFiles;   // 从结构体起始到文件列表数据的偏移字节数,一般为20
    #   POINT pt;       // 拖放时的坐标(这里设为0)
    #   BOOL fNC;       // 非客户区标志(设为0)
    #   BOOL fWide;     // 是否为 Unicode 格式,非0表示 Unicode(设为1)
    # } DROPFILES;
    #
    # 使用 struct.pack 进行打包,注意使用小端格式 "<"
    dropfiles = struct.pack("<IiiII", 20, 0, 0, 0, 1)
    
    # 将结构体和文件列表数据拼接
    data = dropfiles + file_list_bytes
    
    # 打开并清空剪贴板,然后设置 CF_HDROP 数据格式(用于文件拖放操作)
    win32clipboard.OpenClipboard()
    win32clipboard.EmptyClipboard()
    win32clipboard.SetClipboardData(win32con.CF_HDROP, data)
    
    # 同时设置“Preferred DropEffect”格式,指定复制(1:复制;0:剪切)
    cf_drop_effect = win32clipboard.RegisterClipboardFormat("Preferred DropEffect")
    win32clipboard.SetClipboardData(cf_drop_effect, struct.pack("<I", 1))
    
    win32clipboard.CloseClipboard()




def main():
    if len(sys.argv) != 2:
        print("Please provide the image path.")
        sys.exit(1)

    file_image = sys.argv[1]
    files = [file_image]
    copy_files_to_clipboard(files)
    print("文件已复制到剪贴板,可在资源管理器中粘贴。")


if __name__ == '__main__':
    main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

子杣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值