Главная » 2009 Ноябрь 6 » Как сделать, чтобы запускалась только одна копия приложения
09:00 Как сделать, чтобы запускалась только одна копия приложения |
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; |
|
Всего комментариев: 0 | |