СообЧа > База Знаний > Программирование > Delphi

Вопрос

Во время выполнения программы нужно проверять запущена ли еще одна копия программы и в случае ее закрытия открывать снова. Каждая прога должна проверять наличие своей копии.

Ответ

Создаешь новое приложение, потом идешь в Project-View Source и вписываешь туда это:

program Proc2;

uses
Windows,ShellApi,
Forms,
Unit1 in 'Unit1.pas' {Form1};

{$R *.RES}

const
semName='{268726AA-0250-4241-BD3E-B3A68E059B07}';
terminate:Boolean=False;

Var
tid:Cardinal;
h:THandle;
th:THandle;

function ThrFunc(Parameter: Pointer): Integer;
begin
while not terminate do
begin
if WaitForSingleObject(h,100) = WAIT_OBJECT_0 then
ShellExecute(0,nil,PChar(ParamStr(0)),nil,nil,SW_NORMAL);
end;
ReleaseSemaphore(h,1,nil);
Result:=0;
end;


begin
h:=CreateSemaphore(nil,1,1,semName);
if h<>0 then
try
th:=BeginThread(nil,0,ThrFunc,nil,0,tid);
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
terminate:=True;
WaitForSingleObject(th,INFINITE);
finally
CloseHandle(h);
end;
end


PS: Через диспетчер задач это можно снять… слава богу =)

A.Z.



Copyright © 2000-2004 Сообщество Чайников
Контактная информация