我怎么样才能让程序只能运行一个实例?

解决方案 »

  1.   

    程序启动时将Application的Title特性字段的值暂时改变。 利用Windows API函数FindWindows()查找窗口 
    恢复Application的Title值 
      上述步骤一般在主Form的OnCreate事件中实现,示例如下:procedure TForm1.FormCreate(Sender: TObject);
    var
      ZAppName: array[0..127] of char;
      Hold: String;
      Found: HWND;
    begin
      Hold := Application.Title;
      Application.Title := 'OnlyOne'
         + IntToStr(HInstance); // 暂时修改窗口标题
      StrPCopy(ZAppName, Hold); // 原窗口标题
      Found := FindWindow(nil, ZAppName); // 查找窗口
      Application.Title := Hold; // 恢复窗口标题
      if Found<>0 then begin
        // 若找到则激活已运行的程序并结束自身    ShowWindow(Found, SW_RESTORE);
        Application.Terminate;
      end;
    end;
      

  2.   

    program Project1;uses
      Forms,windows,
      Unit1 in 'Unit1.pas' {Form1};var hw:hwnd;{$R *.RES}
    begin
      Application.Initialize;
      application.title:='test';//名字自己定义
      CreateMutex(nil, false, 'ADManager');
      if GetLastError <> ERROR_ALREADY_EXISTS then
      begin
        Application.CreateForm(TForm1, Form1);
        Application.Run;
      end;
    end.