获取在Windows 资源管理器中执行COPY/PASTE的文件列表信息

在文件传输模块开发过程中,要实现这样的一个功能:在资源管理器中对选中的文件或者文件夹CTRL+C,在聊天窗口中按下CTRL+V,获取用户选择的文件或文件夹发送给对端用户。这其中存在一个问题:如何从剪切板数据中获取用户选择了哪些文件或文件夹呢?经研究和测试,用如下的代码可以获取到文件列表信息:

    if( ::OpenClipboard( NULL ) ) // 打开剪切板
     {       
	HDROP hDrop = HDROP( ::GetClipboardData( CF_HDROP ) ); // 获取剪切板中复制的文件列表相关句柄
        if( hDrop != NULL ) 
		{
			char szFilePathName[MAX_PATH+1] = {0};	
			UINT nNumOfFiles = DragQueryFile( hDrop, 0xFFFFFFFF, NULL, 0 ); // 得到文件个数
			
			// 考虑到用户可能同时选中了多个对象(可能既包含文件也包含文件夹),所以要循环处理
			for ( UINT nIndex=0 ; nIndex<nNumOfFiles; ++nIndex )	
			{
				memset( szFilePathName, 0, MAX_PATH+1 );
				DragQueryFile( hDrop, nIndex, szFilePathName, MAX_PATH );  // 得到文件名
			}
		}

        ::CloseClipboard(); // 关闭剪切板
      } 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
1. 实现了对文件文件夹的复制、粘贴、剪切、删除功能; 2.实现了对文件夹的双击打开、对多种类型的文件的双击打开查看功能; 3.实现了主窗体左边驱动器树形视图(显示各驱动器及内部各文件列表)、右边文件列表视图(显示当前文件夹下所包含的文件和下一级文件夹)的显示,以及两者的联动显示。左右窗体间设有分隔条,拖动可改变左右窗体大小。文件列表视图包含了名称、修改日期、类型、大小四个字段; 4.实现了在主窗体右边文件列表视图进行右键时弹出的上下文菜单,该菜单会根据当前是否选某一文件项而将菜单项加以调整。例如,右键时,若当前没有选文件项,则可以显示出“查看”、“新建文件”、“新建文件夹”等菜单项;但是若当前选了某一文件项,则可以显示出“复制”、“剪切”、“重命名”等菜单项; 5. 实现了主窗体地址栏、状态栏的显示和隐藏可以由用户控制; 6. 实现了文件文件夹属性的查看; 7.实现了对当前计算机的进程、线程简单管理功能; 8. 实现了在当前路径下“返回上一级目录”的功能; 9. 实现了在主窗体上方地址栏直接输入文件路径,然后直接回车查看该路径下的文件列表的功能; 10. 实现了对当前计算机文件文件夹的监控功能。可定制化程度较高,既可以实现对特定路径的监控,也可以实现对具体磁盘驱动器的监控,甚至是全盘监控。监控过程的日志均高亮显示在监控窗口,也支持将日志保存到特定路径; 11. 将重命名功能加以改进,实现了类似windows的”选定->再单击->出现重命名状态->进行重命名“功能; 12. 实现了对当前计算机的文件/文件夹的权限管理功能。权限管理包括:完全控制、修改、读取和执行、列出文件夹内容、读取、写入共6个模块; 13.实现了”最近访问“的功能,用户可以在该功能区找到最近使用的文件,并双击打开查看; 14.实现了新建文件功能,用户可以根据自己的需要在弹出的窗口输入文件的全名(包括“文件名+拓展名”),从而新建各种类型的文件; 15.实现了用户在主窗体右边文件列表的历史访问路径的前进、后退功能; 16.实现了对文件/文件夹的快速搜索功能(基于多线程)。使用时先在地址栏输入特定文件路径(或者直接进入特定文件路径),然后直接在主窗体上方搜索框输入你所要搜索的文件名或关键字,最后回车即可在当前文件列表显示出搜索到的结果,搜索到的文件/文件夹支持直接双击查看或编辑。实测时,比windows自带的文件/文件夹搜索功能快一点。 ....... 支持开源精神,需要详细了解这个Demo的朋友可以移步: https://github.com/Yuziquan/MyFileManager 欢迎star~~~
### 回答1: 首先,您需要了解Tkinter模块的基础知识,然后使用它来构建GUI,实现模仿Windows文件资源管理器的功能。您需要使用Tkinter创建菜单栏、工具栏、文件夹树和文件内容视图,以及添加动作,例如新建、复制、粘贴等。总而言之,您需要做的是使用Tkinter创建出仿照Windows文件资源管理器的功能,以及添加相应的行为。 ### 回答2: 使用Python的Tkinter模块开发一个仿制的Windows文件资源管理器是可行的。以下是一个简单实现的示例: ```python import os import tkinter as tk from tkinter import messagebox, filedialog root = tk.Tk() root.title("文件资源管理器") root.geometry("800x600") frame = tk.Frame(root) frame.pack(pady=20) # 显示当前目录路径 current_dir_label = tk.Label(frame, text="") current_dir_label.pack() # 显示当前目录下的文件文件夹 file_listbox = tk.Listbox(frame, width=100) file_listbox.pack(pady=10) # 刷新显示当前目录下的文件文件夹 def refresh_file_listbox(): current_dir = os.getcwd() current_dir_label.config(text="当前目录:" + current_dir) file_listbox.delete(0, tk.END) for file in os.listdir(current_dir): file_listbox.insert(tk.END, file) refresh_file_listbox() # 打开文件夹 def open_folder(): folder_selected = filedialog.askdirectory() if folder_selected: os.chdir(folder_selected) refresh_file_listbox() open_folder_button = tk.Button(root, text="打开文件夹", command=open_folder) open_folder_button.pack(pady=10) # 打开文件 def open_file(): selected_file = file_listbox.get(file_listbox.curselection()) if os.path.isfile(selected_file): os.startfile(selected_file) else: messagebox.showinfo("错误", "请选择一个文件!") open_file_button = tk.Button(root, text="打开文件", command=open_file) open_file_button.pack(pady=10) root.mainloop() ``` 此示例使用Tkinter模块创建了一个简单的文件资源管理器界面。通过打开文件夹按钮,使用`filedialog`模块选择指定文件夹作为当前目录,然后通过`os`模块的相关函数获取并显示当前目录下的文件文件夹。用户可以选择打开文件夹或文件。需要注意的是,此示例仅是一个基本的框架,可以根据具体需求进行扩展和改进。 ### 回答3: 使用Python的tkinter模块可以创建一个类似于Windows文件资源管理器的应用程序。下面是一个简单的示例,其包含一个文件资源管理器窗口、一个显示文件目录的列表框以及一些常见的操作按钮(例如打开、复制、粘贴、删除等): ```python import os import shutil import tkinter as tk from tkinter import filedialog, messagebox # 定义文件资源管理器类 class FileExplorer(tk.Tk): def __init__(self): super().__init__() self.title("文件资源管理器") self.geometry("500x300") # 创建文件目录列表框 self.listbox = tk.Listbox(self) self.listbox.pack(fill=tk.BOTH, expand=True) # 添加按钮 open_button = tk.Button(self, text="打开", command=self.open_file) open_button.pack(side=tk.LEFT) copy_button = tk.Button(self, text="复制", command=self.copy_file) copy_button.pack(side=tk.LEFT) paste_button = tk.Button(self, text="粘贴", command=self.paste_file) paste_button.pack(side=tk.LEFT) delete_button = tk.Button(self, text="删除", command=self.delete_file) delete_button.pack(side=tk.LEFT) # 显示文件目录 self.show_directory() # 打开文件 def open_file(self): file_path = filedialog.askopenfilename() if file_path: os.startfile(file_path) # 复制文件 def copy_file(self): file_path = self.listbox.get(self.listbox.curselection()) if file_path: self.clipboard = file_path # 粘贴文件 def paste_file(self): if hasattr(self, 'clipboard'): destination = os.getcwd() shutil.copy(self.clipboard, destination) self.show_directory() messagebox.showinfo("提示", "粘贴成功!") # 删除文件 def delete_file(self): file_path = self.listbox.get(self.listbox.curselection()) if file_path: os.remove(file_path) self.show_directory() messagebox.showinfo("提示", "删除成功!") # 显示文件目录 def show_directory(self): self.listbox.delete(0, tk.END) files = os.listdir(os.getcwd()) for file in files: self.listbox.insert(tk.END, file) # 实例化并运行文件资源管理器 file_explorer = FileExplorer() file_explorer.mainloop() ``` 这个示例程序创建了一个简单的文件资源管理器窗口。你可以在该窗口浏览文件目录,打开文件、复制文件、粘贴文件以及删除文件。请确保在运行程序时,已安装好Python以及相应的tkinter模块。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

dvlinker

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

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

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

打赏作者

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

抵扣说明:

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

余额充值