Как не допустить запуск второй копии программы 7
|
- "Hе" с глаголами пишется вместе или отдельно?
- Через пробел!
|
У меня есть элементарный вариант, проще не бывает. Предлагаемый мной модуль
только определяет запущена программа или нет. Я не стал усложнять этот модуль
автоматическим изменением имени семафора на случай если две программы захотят
использовать этот модуль одновременно. Имея самые скромные навыки в
программировании можно придумать семафору своё уникальное имя и переписать его в
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.
|
|