Verificar se a aplicação já esta aberta
Ola galera....gostaria de saber se existe alguma rotina para identificar se a aplicação já esta aberta para caso do usuário clicar duas vezes para abrir o programa, esta não abrir duplicado.
Carlos Magno
Curtidas 1
Melhor post
Roney Melo
05/12/2012
Olá tem sim, edite o arquivo DPR dos seu projeto
na seção USES adicione Windows para que o tipo Thandle funcione (caso não tenha adicionado), depois só seguir o exemplo:
var
HprevHist: Thandle;
begin
Application.Initialize;
begin
HprevHist := FindWindow(Nil, PChar('título da aplicação'));
if(HprevHist <> 0)then
begin
Application.MessageBox('Aplicativo já se encontra em execução !','Atenção',MB_OK);
ShowWindow(HprevHist,SW_NORMAL);
Application.Terminate;
Exit;
end;
end;
Application.Title := 'título da aplicação';
Application.CreateForm(TfrmPrincipal, frmPrincipal);
Application.Run;
end.
na seção USES adicione Windows para que o tipo Thandle funcione (caso não tenha adicionado), depois só seguir o exemplo:
var
HprevHist: Thandle;
begin
Application.Initialize;
begin
HprevHist := FindWindow(Nil, PChar('título da aplicação'));
if(HprevHist <> 0)then
begin
Application.MessageBox('Aplicativo já se encontra em execução !','Atenção',MB_OK);
ShowWindow(HprevHist,SW_NORMAL);
Application.Terminate;
Exit;
end;
end;
Application.Title := 'título da aplicação';
Application.CreateForm(TfrmPrincipal, frmPrincipal);
Application.Run;
end.
GOSTEI 2
Mais Respostas
Carlos Magno
05/12/2012
Só uma dúvida, e me perdoe porque sou iniciante em delphi e aprendendo na raça, mas onde coloco este código que vc me passou? no evento FormCreate?
var HprevHist: Thandle; begin Application.Initialize; begin HprevHist := FindWindow(Nil, PChar('título da aplicação')); if(HprevHist <> 0)then begin Application.MessageBox('Aplicativo já se encontra em execução !','Atenção',MB_OK); ShowWindow(HprevHist,SW_NORMAL); Application.Terminate; Exit; end; end; Application.Title := 'título da aplicação'; Application.CreateForm(TfrmPrincipal, frmPrincipal); Application.Run; end.
GOSTEI 0
Alan Souza
05/12/2012
Carlos Magno, esse código é para ser adicionado ao arquivo .dpr do seu projeto.
Você pode abrí-lo no menu Project > View Source, ou editá-lo num notepad...
Somente é necessário trocar alguns dados relativos à sua aplicação e à criação do(s) formulário(s), como o Roney já indicou!
Você pode abrí-lo no menu Project > View Source, ou editá-lo num notepad...
Somente é necessário trocar alguns dados relativos à sua aplicação e à criação do(s) formulário(s), como o Roney já indicou!
GOSTEI 0
Carlos Magno
05/12/2012
Ok...consegui inserir, mas aconteceu uma coisa. Quando vou rodar a aplicação ele da o aviso de que o programa já está aberto, mesmo sendo a primeira vez que vou abrir.
GOSTEI 0
Alan Souza
05/12/2012
no meu teste também aconteceu isso, mudei o nome onde no código está 'título da aplicação' para um que não coincidisse com o nome de projeto e funcionou!
GOSTEI 0
Carlos Magno
05/12/2012
Não entendi....então qual seria o nome a ser colocado?
GOSTEI 0
Alan Souza
05/12/2012
no meu não tinha funcionado quando o nome do projeto e o Application.Title eram 'Testes', troquei o Application.Title e passou a funcionar...
isso pode acontecer por exemplo se seu projeto se chama Financeiro e o Application.Title := 'Financeiro', no caso troque para Application.Title := 'Sistema Financeiro'.
isso pode acontecer por exemplo se seu projeto se chama Financeiro e o Application.Title := 'Financeiro', no caso troque para Application.Title := 'Sistema Financeiro'.
GOSTEI 0
Roney Melo
05/12/2012
Opa perdoe a ausência, bom então deu certo ?
GOSTEI 0
Carlos Magno
05/12/2012
Galera, deu certo, como eu desejava. Agora, se possível, algum de vocês poderiam me dar uma luz nesse outro tópico?
[url]https://www.devmedia.com.br/forum/viewtopic.asp?id=429711[/url]
Desde já agradeço a ajuda podem colocar esse tópico como resolvido.
[url]https://www.devmedia.com.br/forum/viewtopic.asp?id=429711[/url]
Desde já agradeço a ajuda podem colocar esse tópico como resolvido.
GOSTEI 1
Felipe
05/12/2012
Olá estou tentando fazer uso do mesmo código segue tudo que os companheiros a cima falaram, como colocar Windows na Uses, como tbm mudar o titulo da aplicação para ser passado ao HprevHist verificar, mas no meu caso o que acontece é que ele abre mais de uma aplicação como se não estivesse aberto.
segue ai meu código...
var
HprevHist: Thandle;
begin
Application.Initialize;
HprevHist := FindWindow(Nil, PChar(''Sys ControlEasy''));
if(HprevHist <> 0)then
begin
Application.MessageBox(''O aplicativo já se encontra em execução !'',''Atenção'',MB_OK);
ShowWindow(HprevHist,SW_NORMAL);
Application.Terminate;
Exit;
end;
Application.MainFormOnTaskbar := True;
TStyleManager.TrySetStyle(''Smokey Quartz Kamri'');
Application.Title := ''ControlEasy'';
Application.CreateForm(TDmDados, DmDados);
Application.CreateForm(TfrmPrincipal, frmPrincipal);
Application.Run;
end.
segue ai meu código...
var
HprevHist: Thandle;
begin
Application.Initialize;
HprevHist := FindWindow(Nil, PChar(''Sys ControlEasy''));
if(HprevHist <> 0)then
begin
Application.MessageBox(''O aplicativo já se encontra em execução !'',''Atenção'',MB_OK);
ShowWindow(HprevHist,SW_NORMAL);
Application.Terminate;
Exit;
end;
Application.MainFormOnTaskbar := True;
TStyleManager.TrySetStyle(''Smokey Quartz Kamri'');
Application.Title := ''ControlEasy'';
Application.CreateForm(TDmDados, DmDados);
Application.CreateForm(TfrmPrincipal, frmPrincipal);
Application.Run;
end.
GOSTEI 0
Pedro Deola
05/12/2012
Acrescente este código no seu DPR logo após o begin e na uses coloque
uses
Vcl.Forms,
Vcl.Themes,
Vcl.Styles,
Windows,
uses
Vcl.Forms,
Vcl.Themes,
Vcl.Styles,
Windows,
CreateMutex(nil, True, 'XyZzWw'); if GetLastError = ERROR_ALREADY_EXISTS then begin // se aplicativo já estiver aberto não abre novamente Application.MessageBox('O sistema já está aberto.', 'Sistema Informa', MB_OK + MB_ICONINFORMATION); Exit; end;
GOSTEI 0