我有一个程序可以将文件传输到 Windows 计算机(以及许多其他东西)。我们有两种传输方式:
- 在我们的菜单中找到一种易于发现的“发送文件”方法,但它不提供进度条或可取消性
- 较少发现的拖放和剪切/粘贴方法,通过 Windows 外壳提供进度条和可取消性
我们希望获得带有方法 1 的取消按钮的 Windows shell 进度对话框。
所以我想通过 SHFileOperation(或 IFileOperation)使用我的 IDataObject(或它的 IStreams)的源和磁盘文件夹的目标(我将指定)进行 shell 复制。
我们已经有一个 IDataObject 的实现,它通过 CFSTR_FILEDESCRIPTOR、STGMEDIUM、IStream 等公开我们的虚拟文件。这非常有效。我们希望尽可能多地利用这种实现。
我看到带有命名空间扩展的 Windows shell 扩展将是一种明显的方式,可以将我的虚拟文件“挂载”到 shell 项中以充当副本的源,但我拒绝触摸注册表或以其他方式弄乱它们上持久的任何东西系统。我看不到暂时安装虚拟物品的方法。
我已经有工作代码来启动一个资源管理器窗口到目标目录,所以一个明显的“最后手段”类型的解决方案是以编程方式调用拖放操作,我有代码来欺骗 Windows 做大部分的事情,但如果我忽略了一种更优雅(并且更面向未来)的方法,我宁愿不去那里。有任何想法吗?