Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  4 535

•  TDictionary Custom Sort  6 564

•  Fast Watermark Sources  6 336

•  3D Designer  9 287

•  Sik Screen Capture  6 672

•  Patch Maker  7 044

•  Айболит (remote control)  7 055

•  ListBox Drag & Drop  5 925

•  Доска для игры Реверси  97 379

•  Графические эффекты  7 261

•  Рисование по маске  6 557

•  Перетаскивание изображений  5 421

•  Canvas Drawing  5 794

•  Рисование Луны  5 497

•  Поворот изображения  5 028

•  Рисование стержней  3 582

•  Paint on Shape  2 837

•  Генератор кроссвордов  3 717

•  Головоломка Paletto  2 995

•  Теорема Монжа об окружностях  3 798

•  Пазл Numbrix  2 501

•  Заборы и коммивояжеры  3 187

•  Игра HIP  2 154

•  Игра Go (Го)  2 091

•  Симулятор лифта  2 465

•  Программа укладки плитки  2 130

•  Генератор лабиринта  2 606

•  Проверка числового ввода  2 283

•  HEX View  2 616

•  Физический маятник  2 228

 
скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Запретить запуск второго экземпляра программы 2



- Чем отличается программист от политика?
- Программисту платят деньги за работающие программы.


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;








Copyright © 2004-2025 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте