Класс 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 автоматически освободит все ресурсы, принадлежащие приложению.
delphisingletonrun.zip - Исходные коды (2K).