2

是否可以使用 ShellExecuteEx 复制或剪切给定目录中的一组文件?Windows 功能在单个文件上运行良好,但我在任何地方都找不到有关该主题的任何提示(带有文件列表)。

我不希望有任何替代方法(例如 xcopy),因为在执行特定于 shell 项的操作后,我需要 windows shell 功能撤消/重做。

microsoft msdn 库中根本没有记录它。我试图用 PChar("Drive:\file1.fileExt","Drive:\file1.fileExt") 和其他此类常见列表格式等项目列表填充 'lpfile' 参数......但没有做,shellExecuteEx 返回一个 < 33 的值。

是否有诸如“select”或“addtoselection”之类的动词?是否应该添加标志 SEE_MASK_IDLIST 并且在这种情况下是一个 ITEMIDLIST 结构能够定义一个文件列表,ShellExecuteEx 动词将在其上执行?

4

2 回答 2

1

是的,这是可能的,但是如果 Windows API 有内置函数来执行此操作,为什么还要执行外部命令呢?对于复制/剪切操作,我建议您使用SHFileOperation(),微软为此提供了一个代码示例。

或者,您也可以使用CopyFileEx()复制文件,并使用MoveFile()移动文件。它们比SHFileOperation()快。

于 2010-10-17T01:43:52.087 回答
0

你是对的,SHFileOperation 使用起来非常简单(与 shellexexuteex 相比),但是这个函数的行为有点不同。如果您在应用程序中执行 SHFileOperation(例如复制或剪切),如果您直接返回 Windows 资源管理器,则“粘贴”上下文菜单项不可用。似乎 shell 以另一种方式运行,而不是使用 wellexecuteex。通过在应用程序中执行 ShellExecuteEx 并分离单个文件,资源管理器直接启用“粘贴”项。

无论如何,WinApi/ShellApi 对此并不是很清楚,因为总而言之,有很多方法可以复制文件: - SHellExecuteEx 与动词“复制” - SHFileOperation - 剪贴板:模拟文件删除事件时......

但在任何方面,撤消/重做 shell 上下文项的行为都类似于资源管理器进程。- ShellExecuteEx 很好地启用了撤消/重做功能,但仅对单个文件(或未记录)进行操作 - SHFileOperation 可以在文件列表上工作(如您所说,由#0 分隔,结束列表为双#0。但是SHell 上下文菜单似乎不像 ShellExecuteEx 那样与操作链接得那么深。 - 剪贴板:也允许文件列表但不是所有行为(仅复制,不粘贴)。因为“粘贴”似乎更像是一种拖放移动操作,而不是剪贴板,即使 ShellApi 指定它有点相同......他们正在使用其他任何地方都没有使用过的特殊结构......

综合:完全不清楚。windows api 提供了至少 3 种操作文件的方式,但如果我们谈论文件列表,它就不那么合乎逻辑了,甚至是一场噩梦:你必须处理除了微软的 3 个仍在工作的人之外没有人使用的旧结构处理外壳功能...(或不)。

于 2010-10-22T00:15:19.777 回答