Applikáció csak egyszer futhat

Top  Previous  Next

Ha kétszer elindítom ugyanazt az applikációt, akkor a proggi másodszorra kikapcsolja magát, és előtérbe hozza a már megnyitott másik ugyanolyan applikációt

 

uses Messages,WinProcs

. . .

var HWND:THandle;

begin

HWND:=FindWindow('TForm1','xakk'); // form1.caption -ja "xakk" !!

if HWND=0 then

begin

Application.Initialize;

Application.CreateForm(TForm1, Form1);

Application.Run;

end

else

begin

winprocs.SetForegroundWindow(HWND);

end;

end.

 

 

Egy másik összetettebb példa:

 

program Project1;

 

uses

Forms, Windows,

Unit1 in 'Unit1.pas' {Form1};

 

{$R *.res}

var

Mutex : THandle;

begin

Mutex := CreateMutex(nil, True, 'My_Unique_Application_Mutex_Name');

if (Mutex = 0) OR (GetLastError = ERROR_ALREADY_EXISTS) then

begin

 

  // code to searh for, and activate

  // the previous (first) instance

 

end

else

begin

  Application.Initialize;

  Application.CreateForm(TForm1, Form1);

  Application.Run;

  if Mutex <> 0 then

    CloseHandle(Mutex);

  end;

end;

end.

 

 

Saját megoldásom:

 

{$R *.RES}

 

var HWND:THandle;

Mutex : THandle;

 

begin

Mutex := CreateMutex(nil, True, 'ExTemeto');

if (Mutex = 0) OR (GetLastError = ERROR_ALREADY_EXISTS) then

begin

   // Ha már fut egyszer, akkor átvált

   HWND:=FindWindow('TMainForm',NIL);

   if (HWND<>0) then

      winprocs.SetForegroundWindow(HWND);

end else

begin

AboutBox := TAboutBox.Create(Application);

AboutBox.Show;

AboutBox.Update;

Application.Initialize;

Application.HelpFile := 'STMAPEDIT.HLP';

Application.Title := 'StellaSOFT TEMETŐ';

AboutBox.Update;

Application.Initialize;

Application.CreateForm(TMainForm, MainForm);

Application.CreateForm(TDMOD, DMOD);

Application.CreateForm(TElhunytakForm, ElhunytakForm);

Application.CreateForm(TSzamlaListForm, SzamlaListForm);

Application.CreateForm(TCikkTorzsForm, CikkTorzsForm);

Application.CreateForm(TRiportListForm, RiportListForm);

Application.CreateForm(TDelPartnerForm, DelPartnerForm);

Application.CreateForm(TSzamlaForm, SzamlaForm);

Application.CreateForm(TSzamlaTipForm, SzamlaTipForm);

Application.CreateForm(TLockMessageForm, LockMessageForm);

Application.CreateForm(TStornoDlg, StornoDlg);

Application.CreateForm(TPrintView, PrintView);

Application.CreateForm(TUJADATLAPForm, UJADATLAPForm);

Application.CreateForm(TElhunytValasztForm, ElhunytValasztForm);

Application.CreateForm(TMapForm, MapForm);

Application.CreateForm(TInputHRSZForm, InputHRSZForm);

Application.CreateForm(TLoginDlg, LoginDlg);

Application.CreateForm(TESzamlaDialog, ESzamlaDialog);

Application.Run;

if Mutex <> 0 then

   CloseHandle(Mutex);

end;

end.