是否可以使用ShellExecuteEx复制或剪切给定目录中的一组文件?Windows函数在单个文件上工作得很好,但我在任何地方都找不到关于这个主题的任何提示(带有文件列表)。
我不期望任何替代方法(例如xcopy),因为在执行特定于shell项的操作之后,我需要windows shell函数undo/redo。
它在microsoft msdn库中根本没有文档。我尝试用PChar("Drive:\file1.fileExt","Drive:\file1.fileExt")和其他类似的常见列表格式来填充'lpfile‘参数。但是不做任何事情,shellExecuteEx返回值< 33。
有像'select‘或'addtoselection’这样的动词吗?是否应该添加标志SEE_MASK_IDLIST,在本例中是一个ITEMIDLIST结构,它能够定义将在其上执行ShellExecuteEx谓词的文件列表?
发布于 2010-10-17 09:43:52
是的,这是可能的,但是如果Windows API具有内置的函数,为什么还要执行外部命令呢?对于复制/剪切操作,我建议您使用SHFileOperation(),微软为此提供了一个code example。
或者,您也可以使用CopyFileEx()复制文件,并使用MoveFile()移动文件。它们比SHFileOperation()更快。
发布于 2010-10-22 08:15:20
你是对的,SHFileOperation的使用非常简单(与shellexexuteex相比),但是这个函数的行为有点不同。如果您在应用程序中执行SHFileOperation,如复制或剪切,如果您直接返回到Windows资源管理器,则“粘贴”上下文菜单项不可用。看起来shell是以另一种方式运行,而不是whellexecuteex。通过在应用程序中执行ShellExecuteEx并在单个文件上执行,资源管理器可以直接启用“粘贴”项。
无论如何,WinApi/ShellApi对此并不是很清楚,因为总的来说,有许多复制文件的方法:-使用动词' copy‘的SHellExecuteEx - SHFileOperation - ClipBoard:在模拟文件丢弃事件时...
但在任何方面,撤销/重做shell上下文项的行为都类似于浏览器进程。- ShellExecuteEx启用撤消/重做功能,但仅操作单个文件(或未记录的文件)- SHFileOperation启用文件列表(如您所说,以#0分隔,end list a double #0。但SHell上下文菜单似乎没有像ShellExecuteEx那样与操作链接得那么深。-剪贴板:也允许文件列表,但不允许所有行为(仅复制,不粘贴)。因为“粘贴”似乎更像是一种拖放移动操作,而不是剪贴板操作,即使ShellApi指定它有点same...they正在使用其他地方没有使用的特殊结构……
综合:这一点一点也不清楚。windows api提供了至少3种操作文件的方法,但如果我们谈论文件列表,它就不那么符合逻辑,甚至是一场噩梦:你必须处理旧的结构,除了微软的3个仍在开发shell功能的家伙之外,没有人使用它…(或者不使用)。
https://stackoverflow.com/questions/3950216
复制相似问题