Para impedir que o seu programa seja executado mais de uma vez, use a rotina abaixo. Se o
usuário tentar rodar o programa mais de uma vez, você tem a opção de fechar o programa, e o
programa já aberto será exibido.
function IsWindowInMemory (WndTitle : String) : Boolean;
var
hSem : THandle;
hWndMe : HWnd;
begin
Result := False;
hSem := CreateSemaphore (nil, 0, 1, 'NomeDoSemaforo');
if (hSem <> 0) and (GetLastError() = ERROR_ALREADY_EXISTS) then
begin
CloseHandle (hSem);
hWndMe := FindWindow (nil, PChar (WndTitle));
SetWindowText (hWndMe, 'ii7it89lihtf');
hWndMe := FindWindow (nil, PChar (WndTitle));
if hWndMe <> 0 then
begin
if IsIconic (hWndMe) then
ShowWindow (hWndMe, SW_SHOWNORMAL)
else
SetForegroundWindow (hWndMe);
end;
Result := True;
end;
end;
E, no evento OnCreate do form principal, coloque as seguintes linhas:
if IsWindowInMemory (Self.Caption) then
Halt;
Nenhum comentário:
Postar um comentário