Verificar se o programa já está em execução
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.
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
Curtidas 0
Respostas
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.
HprevHist := FindWindow(Nil, PChar('SigaFran'));
if HprevHist = 0 then
{...seu código}
else
ShowWindow( HprevHist, SW_RESTORE )
;
Espero ter colaborado.
GOSTEI 0
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