Однократный запуск программы

Последнее обновление: 16 декабря 2003

Класс TGsvSingletonRun обеспечивает одиночность запуска экземпляра программы. Для использования класса нужно:

1) определить в модуле главной формы приложения глобальную переменную:

var
  SingletonRun: TGsvSingletonRun;

2) в файле проекта сразу после begin и перед строкой Application.Initialize ввести следующие строки:

SingletonRun := TGsvSingletonRun.Create('XXX');
if SingletonRun.ActivatePrevInstance then
  Exit;

где XXX - некоторое уникальное имя, которое должно содержать только латинские буквы и цифры. Оно может быть, например, составлено из имени программы и имени автора. Используется как имя системного файла

3) в событии FormShow главной формы ввести строку:

SingletonRun.RegisterInstance(Self);

4) в событии FormDestroy главной формы ввести строку:

SingletonRun.UnregisterInstance;

Принцип работы класса основан на создании системного файла, отображенного на память, в который записаны указатели окна приложения и главной формы приложения. Функция ActivatePrevInstance проверяет наличие файла и, если он, существует, то вычитывает из него указатели окна запущенного приложения, разворачивает его, если приложение было свернуто в значок, и выдвигает главное окно формы на передний план. Если файл не существует, то функция ничего не делает и просто возвращает false. После запуска программы нужно зарегистрировать запущенный экземпляр. Регистрация экземляра состоит в создании системного файла и запись в него указателей окон. При завершении программы нужно отменить регистрацию - отмена приводит к закрытию системного файла, что позволяет запуститься другому экземплярам программы. В принципе, отмена регистрации необязательна, так как при завершении программы Windows автоматически освободит все ресурсы, принадлежащие приложению.

Download

Downloaddelphisingletonrun.zip - Исходные коды (2K).