Proibir mas de 1 instancia do aplicativo seja executada!

Delphi

10/03/2003

Olá pesso@l

para evitar que um aplicativo no Delphi seja aberto dois ou mais ao mesmo tempo eu uso o seguinte esquema:


if (HPrevInst = 0) then 
   // inicia o programa 
else 
  // avisa que já está aberto 




Mas acontece que na prática isso não funciona.
Será que alguem poderia me ajudar ???


Eniorm

Eniorm

Curtidas 0

Respostas

Orlando Frade

Orlando Frade

10/03/2003

Tente usar a API FindWindow.
FindWindow(nil, ´Caption do seu programa´);

function ProgAberto(Capt: String): Boolean;
// Capt é o caption do seu programa
// Função criada por Orlando Frade em 11/03/2003
var
Win: THandle;
begin
Win := FindWindow(nil, PChar(Capt));
if Win <> 0 then
result := True
else
result := False
end;

espero ter ajudado.

Olá pesso@l para evitar que um aplicativo no Delphi seja aberto dois ou mais ao mesmo tempo eu uso o seguinte esquema:
if (HPrevInst = 0) then 
   // inicia o programa 
else 
  // avisa que já está aberto 
Mas acontece que na prática isso não funciona. Será que alguem poderia me ajudar ???



GOSTEI 0
Paulo

Paulo

10/03/2003

este exemplo deve ser inserido no arquivo de projeto(.DPR)

Program projeto1

uses
Forms, Windows,
Form1 in unit1 (Form1);

{$R *.Res}

var handle1, handle2: HWND;
begin
Application.Initialize;
handle1:=FindWindow(PChar(´Form1´), nil);
if handle1 = 0 then begin
Application.CreateForm(TForm1, Fom1);
Application.Run;
end else begin
handle2:=GetWindow(handle1, GW_OWNER);
ShowWindow(handle2, SW_HIDE);
ShowWindow(handle2, SW_RESTORE);
setForeGroundWindow(handle1);
end
end.
Este código só funciona se o Delphi não estiver carregado.


GOSTEI 0
POSTAR