Thursday, March 09, 2006

Jak tedy bude fungovat náš příklad?

Nejprve se pokusíme vytvořit mutex určitého jména. Pokud se nám to nepovede, což znamená, že již existuje předchozí instance programu (která daný mutex již vytvořila, a proto jej nelze vytvořit znovu), odešleme všem spuštěným aplikacím zprávu a druhou instanci ukončíme. Onu odeslanou zprávu "rozpozná" pouze první (již běžící) instance naší aplikace a zareaguje tak, že se aktivuje (v případě, že je minimalizovaná se obnoví).
Nejprve projektový soubor upravíme tak, že bude vypadat nějak takto:
program Project1;

uses
Windows,
Forms,
Unit1 in 'Unit1.pas' {Form1};

{$R *.RES}

begin
CreateMutex(nil, false, 'NaseAplikace');
if GetLastError = ERROR_ALREADY_EXISTS then
begin
SendMessage(HWND_BROADCAST, RegisterWindowMessage('NaseAplikace'), 0, 0);
Halt(0);
end;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.