如何将多个关联文件传递给程序?

时间:2012-02-21 19:37:59

标签: windows registry windows-shell

我编写了一个Windows软件,并且我已将此程序与文件扩展名相关联。当我双击数据文件然后我的程序启动并打开文件。到目前为止它的作用。但是当我选择多个文件然后在上下文菜单中单击“打开”时,我的程序的多个实例就会启动,一个实例就会出现一个文件。我希望Windows使用我的程序的单个实例打开所有文件。如果没有在我的程序中实现一个实例处理程序,这可能吗?

目前注册表中的MyFileType/shell/open/command如下所示:

"C:\Program Files\MyApp\MyApp.exe" "%1"

也许有一些特殊的令牌/变量我必须使用而不是“%1”来使它工作?在Linux上,我必须将%f用于单个文件,将%F用于文件列表。 Windows上有类似的东西吗?

2 个答案:

答案 0 :(得分:3)

最简单的方法是将您的应用与文件类型的默认shell谓词(例如“open”或“play”)相关联,并实现使用SHCreateShellItemArrayFromDataObject获取所选文件的放置目标。建议阅读:How the Shell Invokes Verbs

如果您不想接管默认动词,可以将动词添加到文件关联的open with list

另一种方法是使您的应用程序成为单例,并通过进程间通信方法(如DDE或RPC)将文档的路径发送到第一个实例。这要求您保持主窗口的响应(例如,如果您正在显示对话框,则不起作用)

答案 1 :(得分:0)

%*可能就是你要找的东西。