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

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Автор: john@mail.enisey.ru

— «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.

{/codecitation}

Добавить комментарий