我写了一个客户端程序,只想让用户只能起一个客户端。我的程序叫a.exe
当用户已经起了一个客户端,再起客户端时,要弹出已起的客户端,而不是起两个客户端。
请问如何实现?

解决方案 »

  1.   

    var
      hnd:HWND;
    begin
      hnd:=FindWindow('TfrmMain','你的程序名称caption');
      if hnd<>0 then begin
        ShowMessage('已经有一个本程序的实例在运行,'
          +#13+#10+'运行多个实例将造成soket端口冲突');
      end
      else begin
        Application.Initialize;
        Application.Title := 'AlertClient';
        Application.CreateForm(TfrmMain, frmMain);
        Application.CreateForm(TfrmLogin, frmLogin);
        Application.CreateForm(TfrmMsg, frmMsg);
        frmLogin.show;
        Application.ShowMainForm:=false;
        Application.Run;
      end;
    end.
      

  2.   

    program Project1;uses
      Forms,
      windows,
      Unit1 in 'Unit1.pas' {Form1};{$R *.res}var myMutex:HWND;beginmyMutex:=CreateMutex(nil,false,'hkOneCopy');// CreateMutex建立互斥对象,并且给互斥对象起一个唯一的名字。if WaitForSingleObject(myMutex,0)<>wait_TimeOut then//程序没有被运行过begin   Application.Initialize;   Application.CreateForm(TForm1, Form1);
      Application.Run;
       end;End.
      

  3.   

    var
      hnd:HWND;
    begin
      hnd:=FindWindow('TfrmMain','你的程序名称caption');
      if hnd<>0 then begin
        SetForegroundWindow(hnd);
      end
      else begin
        Application.Initialize;
        Application.Title := '你的程序名称caption';
        Application.CreateForm(TfrmMain, frmMain);
        Application.CreateForm(TfrmLogin, frmLogin);
        Application.CreateForm(TfrmMsg, frmMsg);
        frmLogin.show;
        Application.ShowMainForm:=false;
        Application.Run;
      end;
    end.
      

  4.   

    这是个遍地开花的问题,网上很多现成答案。我认为在FAQ中就能找到。