ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python-剪贴板的操作-文件相关(复制文件到剪贴板,剪切文件到剪贴板)

2022-02-16 14:01:53  阅读:415  来源: 互联网

标签:文件 剪贴板 win32clipboard UTF clip python ctypes


  1. 读取有没有文件被复制或剪切
import win32clipboard

a = ""
clip = win32clipboard.RegisterClipboardFormat("Preferred DropEffect")
#返回的clip 就是我们将要代入GetClipboardData函数的该数据结构的代码
if win32clipboard.OpenClipboard() == None:
    try:
        #尝试以文件的格式读取剪贴板内容
        clip_ = win32clipboard.GetClipboardData(win32clipboard.CF_HDROP)
        if clip_ != None:
            #获取标志位
            a = win32clipboard.GetClipboardData(clip)
    finally:
        win32clipboard.CloseClipboard()
if a[0] == 2:
    print("剪切")
elif a[0] == 5:
    print("复制")
else:
    print(a[0])    

关于“clip = win32clipboard.RegisterClipboardFormat("Preferred DropEffect")”我也是看别人的博客写的,为什么传递这个字符串我也不明白,我也没有尝试过传递其他的行不行。

传送门:如何与资源管理器互动剪切/拷贝/粘贴文件_xuyongbeijing2008的专栏-CSDN博客

  1. 实现复制文件操作
#参考:https://chowdera.com/2021/10/20211031055535475l.html
#这其实是一个结构体,用以记录文件的各种信息。
class DROPFILES(ctypes.Structure):
    _fields_ = [
        ("pFiles", ctypes.c_uint),
        ("x", ctypes.c_long),
        ("y", ctypes.c_long),
        ("fNC", ctypes.c_int),
        ("fWide", ctypes.c_bool),
    ]

pDropFiles = DROPFILES()
pDropFiles.pFiles = ctypes.sizeof(DROPFILES)
pDropFiles.fWide = True
a = bytes(pDropFiles)

#获取文件绝对路径
filepaths_list = [文件路径1,文件路径2,]
files = ("\0".join(filepaths_list)).replace("/", "\\")
data = files.encode("U16")[2:] + b"\0\0"        #结尾一定要两个\0\0字符,这是规定!

'''
对于多个文本路径,我们如何将其转换为我们需要的Unicode 双字节形式呢?
首先,我们要知道Unicode编码采用UCS-2格式直接存储,而UTF-16恰好对应于UCS-2的,即UCS-2指定的码位通过大端或小端的方式直接保存。UTF-16 有三种类型:UTF-16,UTF-16BE(大端序),UTF-16LE(小端序).UTF-16 通过以名称BOM(字节顺序标记,U + FEFF)启动文件来指示该文件仍然是小端序。
我们只需要把python String使用UTF-16编码后,去掉前两个字节,得到相应的Unicode双字节。
'''
win32clipboard.OpenClipboard()  #打开剪贴板(独占)
try:
    #若要将信息放在剪贴板上,首先需要使用 EmptyClipboard 函数清除当前的剪贴板内容
    win32clipboard.EmptyClipboard() #清空当前的剪贴板信息
    win32clipboard.SetClipboardData(win32clipboard.CF_HDROP,bytes(pDropFiles)+data) #设置当前剪贴板数据
except Exception as e:
    print(str(e))
finally:
    win32clipboard.CloseClipboard() #无论什么情况,都关闭剪贴板
  1. 实现剪切文件

待更新

标签:文件,剪贴板,win32clipboard,UTF,clip,python,ctypes
来源: https://www.cnblogs.com/love-DanDan/p/15900159.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有