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

How does shell extension pass multiple selected files to my own program?

我一整天都在阅读有关如何使 windows 资源管理器在右键单击多个文件时在上下文菜单中添加自定义菜单的内容。

shell 扩展程序传递选定文件以让我的 c# wpf 程序获取这些所有路径的过程是什么?

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

我花了很多时间试图让我的负责人实施它。

Shell 扩展通过 IShellExtInit::Initialize 调用接收初始化,其中它被赋予一个 IDataObject* 参数和 CF_HDROP 形状的数据,由 shell 扩展使用使用 DragQueryFile API(参见 How to Drag and Drop multiple files between Namespace extensions)访问多个文件路径。

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

当您想要将字符串传递给已经 运行 的应用程序时,您可能想要使用 WM_COPYDATA 消息(请参阅 Use WM_COPYDATA to send data between processes)或替代 IPC 方法。