Содержание материала

 

Code:

var AtomText: array[0..31] of Char;

 

 

procedure LookForPreviousInstance;

var

PreviousInstanceWindow : hWnd;

AppName : array[0..30] of char;

FoundAtom : TAtom;

begin

// помещаем имя приложения в AtomText

StrFmt(AtomText, 'OnlyOne%s', [Copy(Application.Title,1,20)]);

// Проверяем, не создано ли уже атома с таким именем приложения

FoundAtom := GlobalFindAtom(AtomText);

if FoundAtom <> 0 then      // эта копия приложения уже запущена

begin

   StrFmt(AppName,'%s', [Application.Title]);

   // изменяем текущий заголовок, чтобы FindWindow не видела его

   Application.ShowMainForm := false;

   Application.Title := 'destroy me';

   // ищем предыдущую копию приложения

   PreviousInstanceWindow := FindWindow(nil,AppName);

   // Передаём фокус на предыдущую копию приложения

   // завершаем текущую копию

   Application.Terminate;

 

   if PreviousInstanceWindow <> 0 then

     if IsIconic(PreviousInstanceWindow) then

          ShowWindow(PreviousInstanceWindow,SW_RESTORE)

     else SetForegroundWindow(PreviousInstanceWindow);

end;

// создаём глобальный атом, чтобы предотвратить запуск другой копии приложения

FoundAtom := GlobalAddAtom(AtomText);

end;

  

 

constructor TForm.Create(AOwner: TComponent);

begin

inherited;

 

LookForPreviousInstance;

...

end;

 

 

destructor TForm.Destroy;

var

FoundAtom : TAtom;

ValueReturned : word;

begin

// не забудьте удалить глобальный атом

FoundAtom := GlobalFindAtom(AtomText);

if FoundAtom <> 0 then ValueReturned := GlobalDeleteAtom(FoundAtom);

 

inherited Destroy;

end;

 

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить