Советы по Delphi


              

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


Как не допустить запуск второй копии программы 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; begin
mmm:=false; hMutex:=CreateMutex(nil,TRUE,'AbraShvabra');       // Создаем семафор if GetLastError <> 0 then mmm:=true;       // Ошибка семафор уже создан ReleaseMutex(hMutex); end.
[000899]


Содержание  Назад  Вперед