shell扩展如何将多个选定文件传递给我自己的程序?

时间:2017-03-19 21:39:16

标签: c# c++ com shell-extensions

我一直在阅读,如何让Windows资源管理器在右键单击多个文件时在上下文菜单中添加自定义菜单。

进程是什么时候shell扩展会传递选定的文件来说出我的c#wpf程序并获取这些所有路径?

要打包我的程序,这是否意味着我必须将我的程序和shell扩展包装在一起,这样它们都可以安装并且可以一起工作吗?

我一直花费数小时的时间试图让我的过程实现它。

1 个答案:

答案 0 :(得分:2)

Shell扩展程序通过IShellExtInit::Initialize调用接收初始化,其中IDataObject*个参数带有CF_HDROP形状数据,shell扩展使用DragQueryFile API(请参阅object.ToString)以访问多个文件路径。

一旦shell扩展提取了文件路径,并且您需要它将集合传递给您应该从shell扩展启动的应用程序,您可以自由定义自己的方法来进一步传递字符串。例如,您可以从路径字符串格式化命令行,或者将路径写入临时文件,然后将其名称作为命令行参数传递。

如果要将字符串传递给已在运行的应用程序,可能需要使用WM_COPYDATA消息(请参阅How to Drag and Drop multiple files between Namespace extensions)或替代IPC方法。