gpt4 book ai didi

windows - 如何一次将多个文件传递到我注册的应用程序?

转载 作者:行者123 更新时间:2023-12-02 18:45:15 24 4
gpt4 key购买 nike

在与 Windows 10 中的图形文件格式关联的 Delphi 10.4.2 win-32 VCL 应用程序中,我在 Windows 文件资源管理器中选择了参数文件。在这里,我观察了在 Application.Initialize; 之后传递到我的应用程序的文件:

CodeSite.Send('AppInstances: ParamCount', ParamCount);

当我在资源管理器中选择一个文件,然后按ENTER键时,该文件就会加载到我的应用程序中。到目前为止一切顺利。

但是,当我在资源管理器中选择三个文件,然后按ENTER键时,我的应用程序每次都会使用 3 个文件参数之一启动三次:

enter image description here

是否有可能 Explorer 仅启动我的应用程序一次,并在我按 Enter 键时将 3 个选定的文件一次性传递到我的应用程序?

最佳答案

在 Windows 7 及更高版本1上,您可以 register a MultiSelectModel值(DocumentPlayer)与注册表中的文件关联动词。这是允许 Explorer 一次向应用程序的单个实例发送多个文件的最简单方法,例如在单独的命令行参数中。

1:我不知道这个功能是什么时候第一次引入的。

MultiSelectModel 之前,处理此问题的其他方法包括:

  • 实现 IDropTarget您的应用程序中的界面,然后 registering the DropTarget与您的文件关联动词。然后,Shell 可以构造一个包含文件信息的 IDataObject,并将其传递给您的 IDropTarget 实现(另请参阅 this article )。这是首选方法,因为它不受其他方法(包括 MultiSelectModel!)的限制,并且它允许更大的灵活性,因为相同的 IDropTarget 实现可以接受在资源管理器中执行多个文件,将文件拖放到应用程序的窗口中,甚至拖放到应用程序的 .EXE 文件本身上。只需使用适当的 API 注册相同的 IDropTarget 即可。

  • 在您的应用程序中实现 DDE 服务器,然后 registering the server与您的文件关联动词。然后,Shell 可以启动与您的应用程序的 DDE 对话,并使用您指定的命令将文件路径发送给它。

  • 只是接受 Shell 为每个文件启动一个单独的进程。在您的应用程序创建其 UI 之前,让其启动代码检查其命令行上的文件路径,如果找到,则查找已运行的应用程序的另一个实例,如果找到,则使用您选择的进程间通信机制(即,WM_COPYDATA、命名管道、套接字、邮槽等)将文件路径发送到该现有实例,然后退出。

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com