terça-feira, 23 de dezembro de 2008

Impedir que o seu programa seja executado mais de uma vez com Delphi


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: