Вопрос
Во время выполнения программы нужно проверять запущена ли еще одна копия программы и в случае ее закрытия открывать снова. Каждая прога должна проверять наличие своей копии.
Ответ
Создаешь новое приложение, потом идешь в 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 Сообщество Чайников
Контактная информация