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

标签 windows registry windows-shell

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

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

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

也许我必须使用一些特殊的 token /变量来代替“%1”才能使其正常工作?在 Linux 上,我必须对单个文件使用 %f,对文件列表使用 %F。 Windows 上有类似的东西吗?

最佳答案

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

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

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

关于windows - 如何将多个关联文件传递给一个程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9383981/

相关文章:

docker - 从 Private Docker Registry 中删除图像的方法

python - 通过 pip 安装时,re.error : missing ), 位置 0 处未终止的子模式

windows-services - 更改服务的启动类型 (Windows)

c# - VERSIONINFO - 忽略自定义值

windows - 安装 Office 2013 后无法安装 MS Project 2013

c# - 如何从某个进程获取打开的套接字列表?

node.js - 如何为 child_process.exec 指定 shell 可执行文件?

.net - 我可以使用 C++/CLI 实现 shell namespace 扩展接口(interface),但将实际工作交给 .NET 吗?

c# - 在 Windows 资源管理器中打开一个文件夹并选择一个文件仅在第二次有效

ruby - Windows 资源管理器外壳扩展的自动化 GUI 测试