Windows 如何将多个文件同时传递到我注册的应用程序?
在与Windows 10中的图形文件格式相关联的Delphi 10.4.2 win-32 VCL应用程序中,我在Windows文件资源管理器中选择了参数文件。在这里,我观看了Windows 如何将多个文件同时传递到我注册的应用程序?,windows,delphi,delphi-10.4-sydney,microsoft-file-explorer,Windows,Delphi,Delphi 10.4 Sydney,Microsoft File Explorer,在与Windows 10中的图形文件格式相关联的Delphi 10.4.2 win-32 VCL应用程序中,我在Windows文件资源管理器中选择了参数文件。在这里,我观看了Application.Initialize之后传递到我的应用程序的文件: CodeSite.Send('AppInstances: ParamCount', ParamCount); 当我在资源管理器中选择一个文件,然后按ENTER键时,该文件将加载到我的应用程序中。到目前为止还不错 但是,当我在资源管理器中选择三个文件
Application.Initialize之后传递到我的应用程序的文件代码>:
CodeSite.Send('AppInstances: ParamCount', ParamCount);
当我在资源管理器中选择一个文件,然后按
ENTER键时,该文件将加载到我的应用程序中。到目前为止还不错
但是,当我在资源管理器中选择三个文件,然后按ENTER键时,我的应用程序会启动三次,每次启动三个文件参数中的一个:
当我按Enter键时,浏览器是否可能只启动我的应用程序一次,并将3个选定的文件一次传递给我的应用程序?在Windows 7和更高版本1上,您可以在注册表中使用文件关联动词进行赋值(或Document
或Player
)。这是允许Explorer一次向应用程序的单个实例发送多个文件的最简单方法,例如在单独的命令行参数中
1:我不知道这个功能是什么时候开始使用的
在MultiSelectModel
之前,处理此问题的其他方法包括:
- 在应用程序中实现接口,然后使用文件关联谓词。然后,Shell可以构造一个包含文件信息的
,并将其传递给IDataObject
实现(另请参阅)。这是首选方法,因为它不受其他方法的限制(包括IDropTarget
!),并且它允许更大的灵活性,因为相同的MultiSelectModel
实现可以接受在资源管理器中执行的多个文件,这些文件会被放到应用程序的窗口中,甚至连应用程序的IDropTarget
文件本身都被删除了。只需使用适当的API注册相同的.EXE
IDropTarget
- 在应用程序中实现DDE服务器,然后使用文件关联谓词。然后,Shell可以启动与应用程序的DDE对话,并使用指定的命令将文件路径发送到应用程序
- 只是接受Shell,为每个文件启动一个单独的进程。在你的应用程序创建UI之前,让它的启动代码在命令行上检查文件路径,如果找到,则查找已经运行的应用程序的另一个实例,如果找到,则使用你选择的进程间通信机制(即,
,命名管道、套接字、邮箱等)将文件路径发送到该现有实例,然后退出WM_COPYDATA
文档
或播放器
)。这是允许Explorer一次向应用程序的单个实例发送多个文件的最简单方法,例如在单独的命令行参数中
1:我不知道这个功能是什么时候开始使用的
在MultiSelectModel
之前,处理此问题的其他方法包括:
- 在应用程序中实现接口,然后使用文件关联谓词。然后,Shell可以构造一个包含文件信息的
,并将其传递给IDataObject
实现(另请参阅)。这是首选方法,因为它不受其他方法的限制(包括IDropTarget
!),并且它允许更大的灵活性,因为相同的MultiSelectModel
实现可以接受在资源管理器中执行的多个文件,这些文件会被放到应用程序的窗口中,甚至连应用程序的IDropTarget
文件本身都被删除了。只需使用适当的API注册相同的.EXE
IDropTarget
- 在应用程序中实现DDE服务器,然后使用文件关联谓词。然后,Shell可以启动与应用程序的DDE对话,并使用指定的命令将文件路径发送到应用程序
- 只是接受Shell,为每个文件启动一个单独的进程。在你的应用程序创建UI之前,让它的启动代码在命令行上检查文件路径,如果找到,则查找已经运行的应用程序的另一个实例,如果找到,则使用你选择的进程间通信机制(即,
,命名管道、套接字、邮箱等)将文件路径发送到该现有实例,然后退出WM_COPYDATA
“C:\DELPHI\MyApp\MyApp.exe”“%1”
我应该使用其他打开命令吗?我已经制作了几个应用程序,它们都使用DDE和文件关联。它使用一些TDDE。。。组件和某些特定的注册表文件关联注册。@R.Hoek:好吧,Raymond Chen在2007年写道,MSDN说。文件关联应该包括一个用于打开谓词的MultiSelectModel。MSDN描述了如何,但不是如何将多个选定文件实际传递给应用程序。Shell可以通过许多不同的方式将文件传递给注册表中的应用程序(命令行、DropTarget、DDE等),我的应用程序使用此打开命令注册:“C:\DELPHI\MyApp\MyApp.exe”“%1”
我应该使用其他打开命令吗?我已经制作了几个应用程序,它们都使用DDE和文件关联。它使用一些TDDE。。。组件和某些特定的注册表文件关联注册。我明天会查的。@R.Hoek:Raymond Chen在2007年写道,MSDN说。你链接到MultiSelectModel
do