Как не допустить запуск второй копии программы. Вариант 7

У меня есть элементарный вариант, проще не бывает. Предлагаемый мной модуль только определяет запущена программа или нет. Я не стал усложнять этот модуль автоматическим изменением имени семафора на случай если две программы захотят использовать этот модуль одновременно. Имея самые скромные навыки в программировании можно придумать семафору своё уникальное имя и переписать его в previnst.pas вовсе не обязательно семафор называть AbraShvabra.

Использование:
В модуле program в части Uses нужно добавить previnst и вы получаете переменную ммм: boolean которая true если копия программы уже запущена.

Пример:

program Project1;

uses

previnst,  windows, Forms,
Unit1 in 'Unit1.pas' {Form1};

{$R *.RES}
begin
if
mmm then begin
ShowWindow(FindWindow('tform1','Имя окна которое активизировать'),
SW_restore);
SetForegroundWindow(FindWindow('tform1','Имя окна которое
активизировать'));
halt; //завершить программу не создавая ничего.
end;

//Тело программы прогры
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

содержание модуля previnst.pas

unit Previnst;

interface

uses
  Windows;

var mmm:boolean; //эта переменная если true то программа уже запущена

implementation

var

hMutex : integer;
begin
mmm:=false;
hMutex:=CreateMutex(nil,TRUE,'AbraShvabra');       // Создаем семафор
if GetLastError <> 0 then mmm:=true;       // Ошибка семафор уже создан
ReleaseMutex(hMutex);
end.

 
« Предыдущая статья   Следующая статья »