Verificar se a aplicação já esta aberta

05/12/2012

0

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

Carlos Magno

Responder

Post mais votado

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.

Roney Melo

Roney Melo
Responder

Mais Posts

05/12/2012

Carlos Magno

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

06/12/2012

Alan Souza

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

06/12/2012

Carlos Magno

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

06/12/2012

Alan Souza

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

06/12/2012

Carlos Magno

Não entendi....então qual seria o nome a ser colocado?
Responder

06/12/2012

Alan Souza

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

06/12/2012

Roney Melo

Opa perdoe a ausência, bom então deu certo ?
Responder

06/12/2012

Carlos Magno

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

08/04/2020

Felipe

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

09/09/2020

Pedro Deola

Acrescente este código no seu DPR logo após o begin e na uses coloque

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

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar