Verificar se o programa já está em execução
03/03/2010
0
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
Curtir tópico
+ 0
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.
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
Clique aqui para fazer login e interagir na Comunidade :)