代码之家  ›  专栏  ›  技术社区  ›  lkessler

如何使文件关联在单个程序实例中打开多个文件?

  •  6
  • lkessler  · 技术社区  · 15 年前

    我在注册表中为我的程序设置了一个文件扩展名 as Windows requires .

    在注册表中,在shell/open/command下,我得到:

    "C:\MyProgramPath\MyProgram.exe" "%1" 
    

    这对我很管用。当有人单击与我的应用程序关联的一个或多个文件时,我的应用程序会正确打开这些文件,但每个文件都会在单独的程序实例中打开。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Lars Truijens    15 年前

    你可以在使用 DDE http://cc.embarcadero.com/Item/17787 以Delphi为例。

    编辑:

        2
  •  5
  •   Andreas Rejbrand    15 年前

    这是一个相当常见的问题,实际上与Windows文件扩展名无关。双击程序自定义类型的文件时,Windows将启动关联的应用程序 MyProgram.exe %1 作为命令行参数。

    1. 我的程序.exe )启动时,它应该检查是否已经有一个实例在运行。
    2. 如果存在以前的实例,则 我的程序.exe %1
    3. 新实例现在应该自行终止。

    一种非常简单的方法

    有几种方法可以实现这一点。最简单的方法之一是每次启动应用程序时设置注册表项/值,并在应用程序存在时将其删除。然后,当应用程序(的新实例)启动时,在设置该键/值之前,它应该检查是否已经设置了该键/值。如果是这样,请遵循上述步骤(2)和(3)。这可能不是最稳定的方法(事实上,这是一个非常糟糕的主意,因为你不能保证应用程序会删除存在的键/值,如果它这样做不正常),但它会给你一个基本的想法。其他可能更好的方法包括 FindWindow mutexes

    第二步可以通过发送一条windows消息(也许 WM_COPYDATA

    细节

    由于这是一个相当常见的问题,以前也曾处理过。比如说, this Delphi-specific article .