Как не допустить запуск второй копии программы VII
john@mail.enisey.ru советует:
У меня есть элементарный вариант, проще не бывает. Предлагаемый мной модуль только определяет запущена программа или нет. Я не стал усложнять этот модуль автоматическим изменением имени семафора на случай если две программы захотят использовать этот модуль одновременно. Имея самые скромные навыки в программировании можно придумать семафору своё уникальное имя и переписать его в 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;
beginmmm:=false;
hMutex:=CreateMutex(nil,TRUE,'AbraShvabra'); // Создаем семафор
if GetLastError <> 0 then mmm:=true; // Ошибка семафор уже создан
ReleaseMutex(hMutex);
end.
|
[000899]