我一直在阅读,如何让Windows资源管理器在右键单击多个文件时在上下文菜单中添加自定义菜单。
进程是什么时候shell扩展会传递选定的文件来说出我的c#wpf程序并获取这些所有路径?
要打包我的程序,这是否意味着我必须将我的程序和shell扩展包装在一起,这样它们都可以安装并且可以一起工作吗?
我一直花费数小时的时间试图让我的过程实现它。
答案 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方法。