- Чем отличается программист от политика?
- Программисту платят деньги за работающие программы.
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 thenif IsIconic(PreviousInstanceWindow) then
ShowWindow(PreviousInstanceWindow,SW_RESTORE)
else
SetForegroundWindow(PreviousInstanceWindow);
end;
// создаём глобальный атом, чтобы предотвратить// запуск другой копии приложения
FoundAtom := GlobalAddAtom(AtomText);
end;
constructor TForm.Create(AOwner: TComponent);
begininherited;
LookForPreviousInstance;
end;
destructor TForm.Destroy;
var
FoundAtom : TAtom;
ValueReturned : word;
begin// не забудьте удалить глобальный атом
FoundAtom := GlobalFindAtom(AtomText);
if FoundAtom <> 0 then
ValueReturned := GlobalDeleteAtom(FoundAtom);
inherited Destroy;
end;
Программа на Delphi, предназначенная для предотвращения запуска нескольких экземпляров одного приложения одновременно. Вот разбивка кода:
Процедура LookForPreviousInstance
1. Она проверяет, существует ли атом (уникальный идентификатор) для текущего экземпляра приложения в системе.
2. Если он есть, это означает, что другой экземпляр уже запущен, поэтому:
* Она изменяет заголовок текущего экземпляра на 'destroy me' для предотвращения поиска FindWindow.
* Она заканчивает работу текущего экземпляра с помощью Application.Terminate.
* Она устанавливает фокус на предыдущий экземпляр, найдя его handle окна и восстановив или принеся его в передний план, если необходимо.
3. Если атом не найден, она создает новый глобальный атом для текущего экземпляра.
Конструктор формирования
1. Он вызывает конструктор наследника для инициализации формы.
2. Он вызывает LookForPreviousInstance для проверки запущено ли уже другое приложение и предотвращения запуска нескольких экземпляров одновременно.
Деструктор формирования
1. Он проверяет, существует ли атом для текущего экземпляра в системе.
2. Если он есть, она удаляет атом с помощью GlobalDeleteAtom.
3. Она вызывает деструктор наследника для финализации уничтожения формы.
Основное отличие между программистом и политиком заключается в том, что программист пишет код для решения проблем и создания функционирующих программ, а политик пишет законы и принимает решения для формирования общества.
В отношении оплаты, программисты обычно получают за создание работающих программ, а политики могут получать компенсацию за свои услуги в различных формах (например, зарплата, льготы или пожертвования на кампанию).
В целом, это программа обеспечивает, что только один экземпляр приложения может запускаться одновременно, предотвращая запуск нескольких экземпляров одновременно.
В статье рассматривается реализация механизма запрета запуска второго экземпляра программы на примере приложения с использованием Delphi и технологии атомов (atoms).
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS