Verificar se o programa já está em execução

Delphi

03/03/2010

Bom dia   Estou tentando fazer um script para não permitir que seja aberta mais de uma instancia do programa ao mesmo tempo, funcionou perfeitamente no delphi 2006, mas no 2010 não está funcionando. Ou seja que seja verificado se meu programa ja esta aberto e o usuario tentar abrir novamente, apenas a instancia que ja esta aberta venha para foco. Segue o script que estou usando.   {$R *.res} Var
   HprevHist : HWND;
begin
   Application.Initialize;
   HprevHist := FindWindow(Nil, PChar('SigaFran'));
   if HprevHist = 0 then
   begin
      Application.Initialize;
      Application.MainFormOnTaskbar := True;
      Application.Title := 'SigaFran';
      Application.CreateForm(TdmPrincipal, dmPrincipal);
      Application.CreateForm(TfrmPrincipal, frmPrincipal);
      Application.Run;
   end else
   begin
      SetForegroundWindow(HprevHist);
      Windows.ShowWindow(HprevHist,SW_RESTORE);
   end;   Colocando esse script no dpr simplesmente nem abre abre o programa. Obrigado.
Marcio Vergani

Marcio Vergani

Curtidas 0

Respostas

Wilson Junior

Wilson Junior

03/03/2010

Tente algo como

HprevHist := FindWindow(Nil, PChar('SigaFran'));
if  HprevHist = 0 then
  {...seu código}
else
    ShowWindow( HprevHist, SW_RESTORE )
;


Espero ter colaborado.
GOSTEI 0
Pjrm1470

Pjrm1470

03/03/2010

Tente rescrever o script no OnCreate da Aplicação. Sendo a primeira coisa a fazer. Se existir... de Application.Terminate; Se não não faça nada.   Essa seria a minha solução: { OnCreate evento } var   HPrevHist: HWND; begin   HPrevHist := FindWindow(Nil, Pchar('SigaFran'));   if not (HPrevHist = 0) then   begin     SetForeGroundWindow(HPrevHist);     Windows.ShowWindow(HPrevHist, SW_RESTORE);     Application.Terminate;   end;     { aqui continua a aplicação caso não achar nenhuma outra instancia } end;   Não testei o codigo acima, mas fui pela logica. Se gostar... Testai e me fala se funcionou.   Att, pjrm1470  
GOSTEI 0
POSTAR