- Код: Выделить всё
program myprogramm;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Interfaces,windows, Forms, gf, LResources, zastavka;
Const NamedMutex='myprogramm_PROGRAMMI'; // Описание мьютекса программы
Var WND:HWND;
Function CheckInstance(Name: PChar): Integer;
Var Mutex:Integer;
Begin
Mutex:=CreateMutex(nil,True,Name);
IF GetLastError<>0 then Result:=0 else Result:=Mutex;
ReleaseMutex(Mutex);
End;
{$IFDEF WINDOWS}{$R universal_slovar.rc}{$ENDIF}
begin
With Application Do
Begin
IF CheckInstance(NamedMutex)=0 then
{Если наш мьютекс уже найден в системе}
Begin
{Находим окно объекта TApplication}
WND:=Findwindow(nil,'Моя программа');
IF WND<>0 then
Begin
{Восстанавливаем его}
ShowWindow(WND,SW_RESTORE);
{Устанавливаем в качестве переднего окна}
SetForeGroundWindow(Wnd);
{Выходим из программы, не запуская её}
Exit;
End;
End;
Title:='Моя программа';
Initialize;
{$I universal_slovar.lrs}
Application.Initialize;
zastava := Tzastava.Create(Application);
zastava.Show;
zastava.Update;
while zastava.timerzastava.Enabled do Application.ProcessMessages;
zastava.Hide;
zastava.Free;
Application.CreateForm(Tmyprogramm, myprogramm);
Application.Run;
end;
end.
В том плане что приложение всё равно запускается дважды...