【问题标题】:How to open all files that are dragged and dropped on application icon?如何打开在应用程序图标上拖放的所有文件?
【发布时间】:2013-03-12 18:01:14
【问题描述】:

我知道如何以这种方式打开一个文件,以及如何获取在我的应用程序的 EXE 或快捷方式上拖放的文件数量。

但是,如何运行多个应用程序实例,每个文件一个?

【问题讨论】:

    标签: delphi file-io drag-and-drop multiple-instances


    【解决方案1】:

    我会把它放在我的 .dpr 文件代码的开头:

    if ParamCount>1 then
    begin
      for i := 1 to ParamCount do
        ShellExecute(0, nil, PChar(ParamStr(0)), PChar('"'+ParamStr(i)+'"'), 
            nil, SW_SHOWDEFAULT);
      exit;
    end;
    

    这会检查是否有多个命令行参数。如果是这样,那么每个都被移交给一个新进程,并且这个进程终止。

    我想你可以把参数 2 交给 N,让这个过程处理参数 1。但是,由于具有数学性质,这个版本的对称性对我很有吸引力。

    【讨论】:

    • 您有什么理由不想将当前实例用于其中一个文件?
    • 很公平。我也想过。
    【解决方案2】:

    就作为参数传递的 droppend 文件而言,可以为传递的每个参数运行一个新的应用程序实例。
    在下面显示的示例中,第一个参数将由资源管理器中通过 Drog&Drop 启动的应用程序处理,任何附加参数都将运行应用程序的新实例。

    program Project1;
    
    uses
      Forms, Shellapi,Messages,Windows,
      Unit2 in 'Unit2.pas' {Form2};
    
    {$R *.res}
    var
    i:Integer;
    begin
      for I := 2 to Paramcount  do
          ShellExecute(0,'OPEN',PChar(Paramstr(0)),PChar(Paramstr(i)),'',sw_Show);
      Application.Initialize;
      Application.MainFormOnTaskbar := True;
      Application.CreateForm(TForm2, Form2);
      Application.Run;
    end.
    

    Form2 中代码的最简单示例可以通过

    procedure TForm2.FormCreate(Sender: TObject);
    begin
      Caption := ParamStr(1); 
      // whatever should be done with the dropped file
    end;
    

    【讨论】:

    • 这段代码是为了演示什么?写一些句子解释答案。
    【解决方案3】:

    放置在应用图标或快捷方式上的每个文件都是命令行参数。您可以轻松地遍历它们:

    var
      i: integer;
    begin
      for i := 1 to ParamCount do
        Memo1.Lines.Add(ParamStr(i));
    end;
    

    因此,对于每一个,您都可以在您的应用程序中打开一个单独的表单(例如,从您的主表单的 OnCreate 中),或者您也可以在正常启动代码之前在从项目 (.dpr) 文件调用的例程中对此进行编码并为每个应用启动额外的实例(为您正在执行此操作的实例保存一个)。

    例如在上面的循环中,您可以使用 ShellExecute 或 CreateProcess 来启动您自己的实例,并将 ParamStr(i) 作为该实例的单个参数。

    【讨论】:

      猜你喜欢
      • 2011-12-16
      • 1970-01-01
      • 2011-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-20
      • 2011-05-09
      • 2016-02-16
      相关资源
      最近更新 更多