Windows 如何使文件关联在单个程序实例中打开多个文件?
我已经在注册表中为我的程序设置了文件扩展名 在注册表中,在shell/open/command下,我得到:Windows 如何使文件关联在单个程序实例中打开多个文件?,windows,shell,registry,associations,Windows,Shell,Registry,Associations,我已经在注册表中为我的程序设置了文件扩展名 在注册表中,在shell/open/command下,我得到: "C:\MyProgramPath\MyProgram.exe" "%1" 这对我来说很好。当有人单击与我的应用程序关联的一个或多个文件时,我的应用程序会正确打开这些文件,但每个文件都会在单独的程序实例中打开 有什么方法可以在一个程序实例中打开所有文件吗?这是一个相当常见的问题,实际上与Windows文件扩展名无关。双击程序自定义类型的文件时,Windows将启动关联的应用程序MyPr
"C:\MyProgramPath\MyProgram.exe" "%1"
这对我来说很好。当有人单击与我的应用程序关联的一个或多个文件时,我的应用程序会正确打开这些文件,但每个文件都会在单独的程序实例中打开
有什么方法可以在一个程序实例中打开所有文件吗?这是一个相当常见的问题,实际上与Windows文件扩展名无关。双击程序自定义类型的文件时,Windows将启动关联的应用程序
MyProgram.exe
,并将文件名%1
作为命令行参数传递
现在,如果您只需要应用程序的一个实例,则需要执行以下操作:
MyProgram.exe
)启动时,它应该检查是否已经有一个实例在运行MyProgram.exe
的新实例应该向旧实例发送一条消息(某种类型的,不一定是windows消息),告诉它打开文件%1
您提供的链接介绍了另一种方法:使用IDropTarget。这可能更适合您已经运行的拖放功能。不幸的是,将其构建到我的程序中总是会阻止多个实例。但那不是我想要的。如果单击文件A,我希望它位于实例1中。如果单击了文件B,那么我希望它出现在实例2中。但是,如果在同一次单击中同时单击A和B,那么它们将是同时传递给程序的两个参数,我希望它们都在一个实例中打开。我为什么要那样?因此,它将具有与使用2个参数从命令行运行我的程序相同的效果,或者将2个文件拖放到我的程序中。谢谢,但这对我没有帮助。@Ikessler:我明白了。我不明白你是这么想的。也许你应该把这个写在你的问题里?很抱歉没有早点提出来,但直到你给出答案我才意识到这是相关的。非常感谢您花时间编写详细的答案。在我链接到的MSDN页面上,它显示“注意:DDE方法已被弃用;请改用DropTarget方法。”我很难弄清楚如何在Delphi中设置IDropTarget。我应该和DDE一起去吗?看来IDropHandler是我的选择。现在我要做的就是想办法。我已经在以下网站上询问了另一个问题以寻求帮助: