- 读取有没有文件被复制或剪切
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博客
- 实现复制文件操作
#参考: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() #无论什么情况,都关闭剪贴板
- 实现剪切文件
待更新