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

03/03/2010

6

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.
Responder

Posts

03/03/2010

Wilson Junior

Tente algo como

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


Espero ter colaborado.
Responder

03/03/2010

Pjrm1470

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  
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira