这问题老帖子太多了!你找一下吧。或者查找 CreateMutex

解决方案 »

  1.   

    Application.Initialize;
      CreateMutex(nil, True, 'my_junhua_soft');
      if GetLastError = ERROR_ALREADY_EXISTS then
         begin
           application.MessageBox('程序已经运行了!','提示信息',mb_ok+mb_iconinformation);
           application.Terminate;
         end;
      Application.CreateForm(TDataModule1, DataModule1);
      Application.CreateForm(Tmainform, mainform);
      Application.CreateForm(Tloginform, loginform);
      loginform.Showmodal;
      Application.CreateForm(Tnavigateform, navigateform);
      mainform.Hide;
      mainform.show;
      Application.Run;
      

  2.   

    var g_app:long;InterlockedIncrement(g_app);
    if (g_app>1) then
    .....
    .....
      

  3.   

    procedure TForm1.FormCreate(Sender: TObject); 
    var 
    ZAppName: array[0..127] of char; 
    Hold: String; 
    Found: HWND; 
    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;