Python实现将指定路径PNG文件复制到Windows剪贴板的方法
实现Windows剪贴板复制文件本身(而非图片内容)
核心思路
Windows剪贴板复制文件需要使用CF_HDROP格式,这是系统用于文件拖拽/复制粘贴的标准格式,和复制图片内容的格式完全不同。以下是直接可用的Python实现,基于pywin32库。
前置准备
先安装依赖库:
pip install pywin32
实现函数
import os import win32clipboard import win32con import ctypes def copy_file_to_clipboard(file_path): # 校验文件有效性 if not os.path.isfile(file_path): raise FileNotFoundError(f"文件不存在:{file_path}") # 转换为绝对路径,避免相对路径识别问题 abs_path = os.path.abspath(file_path) win32clipboard.OpenClipboard() try: win32clipboard.EmptyClipboard() # 构造CF_HDROP格式要求的数据: # 1. 开头4字节为文件数量(小端序) # 2. 每个文件路径以UTF-16LE编码,结尾加双空字节 # 3. 最终以双空字节收尾 file_count = 1 path_utf16 = abs_path.encode('utf-16-le') + b'\x00\x00' hdrop_data = file_count.to_bytes(4, byteorder='little') + path_utf16 + b'\x00\x00' # 分配符合Windows剪贴板要求的全局可移动内存 h_global = win32clipboard.GlobalAlloc(win32con.GMEM_MOVEABLE | win32con.GMEM_ZEROINIT, len(hdrop_data)) p_global = win32clipboard.GlobalLock(h_global) ctypes.memmove(p_global, hdrop_data, len(hdrop_data)) win32clipboard.GlobalUnlock(h_global) # 将数据写入剪贴板 win32clipboard.SetClipboardData(win32con.CF_HDROP, h_global) finally: # 确保剪贴板始终关闭,避免资源占用 win32clipboard.CloseClipboard()
使用示例
# 替换为你的PNG文件路径 copy_file_to_clipboard(r"C:\Users\YourName\Pictures\test.png")
说明
- 调用该函数后,即可在资源管理器、桌面等位置右键粘贴文件,效果和手动复制文件完全一致
- 函数会自动校验文件是否存在,避免无效操作
- 必须使用绝对路径,确保系统能正确识别文件位置
内容的提问来源于stack exchange,提问作者sharkyenergy
相关产品推荐
相关产品推荐

