@kenya
В Delphi можно реализовать исключение повторного запуска программы с помощью следующих шагов:
Ниже приведен пример кода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
uses Windows, SyncObjs; var Mutex: TMultiReadExclusiveWriteSynchronizer; procedure TForm1.FormCreate(Sender: TObject); begin Mutex := TMultiReadExclusiveWriteSynchronizer.Create; try if Mutex.BeginWrite then begin Mutex.EndWrite; end else begin Application.Terminate; end; except Mutex.Free; raise; end; end; procedure |
@kenya
TForm1.FormDestroy(Sender: TObject); begin Mutex.Free; end;
При создании формы в методе FormCreate мы пытаемся захватить мьютекс с помощью Mutex.BeginWrite. Если захватить мьютекс не удалось, значит программа уже запущена и мы вызываем Application.Terminate, чтобы закрыть приложение. Если удалось захватить мьютекс, то ничего не делаем и продолжаем нормальную работу программы.
В методе FormDestroy мы освобождаем выделенную память для мьютекса.
Таким образом, каждый новый экземпляр программы будет пытаться захватить мьютекс. Если мьютекс уже занят, программа будет закрыта. Это позволяет избежать повторного запуска программы в Delphi.