Verificar se exe já está aberto então mostrar ao usuário

09/09/2020

0

Boa tarde.

Implementei em meu arquivo DPR a instrução abaixo para verificar se o plicativo já está em execução, contudo eu não gostaria de dar uma mensagem ao usuário, mas sim gostaria que fosse aberto/mostrado o aplicativo que já está aberto, contudo não sei como fazer, alguém tem alguma sugestão para me auxiliar?

Uso também o componente TrayIcon.

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.'+#13+'Verifique o canto inferior direito próximo ao relógio.', 'Sistema Informa', MB_OK + MB_ICONINFORMATION);
  Exit;
end;
Pedro Deola

Pedro Deola

Responder

Post mais votado

10/09/2020

Boa tarde.

Implementei em meu arquivo DPR a instrução abaixo para verificar se o plicativo já está em execução, contudo eu não gostaria de dar uma mensagem ao usuário, mas sim gostaria que fosse aberto/mostrado o aplicativo que já está aberto, contudo não sei como fazer, alguém tem alguma sugestão para me auxiliar?

Uso também o componente TrayIcon.

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.'+#13+'Verifique o canto inferior direito próximo ao relógio.', 'Sistema Informa', MB_OK + MB_ICONINFORMATION);
  Exit;
end;


Exemplo:

var
handle: Thandle;
begin
handle := FindWindow('TfrmPrincipal',nil);
if Handle<>0 then
begin
Application.MessageBox('O APP já Esta em Execução!',
'Sistema em Execução', mb_ok+mb_IconInformation);
//Para Avisar o outro App use algo como:
//SendMessage(handle, WM_NEXTDLGCTL, 0, 0);
//https://www.devmedia.com.br/windows-messages/1243
Application.Terminate;
end
Else
begin
Application.Initialize;
Application.CreateForm(TfrmPrincipal, frmPrincipal);
Application.Run;
end;
end.

Celso Lenon

Celso Lenon
Responder

Mais Posts

10/09/2020

Pedro Deola

Muito Top este link Celso, consegui fazer estudando este exemplo.

Para quem precisar vou simplificar meu exemplo

No arquivo .DPR
uses
  Messages;

 var handle: Thandle;
 var copyDataStruct: TCopyDataStruct ;
begin

handle := FindWindow('TFORM_SENHA',nil);
if handle<>0 then begin
  SendMessage(handle, WM_COPYDATA, Integer(handle), Integer(@copyDataStruct)) ;
end   Else     begin
      Application.Initialize;
...
end;



onde TFORM_SENHA é o formulário que estou buscando.


Já no formulário TFORM_SENHA
  private
       procedure WMCopyData(var Msg : TWMCopyData) ; message WM_COPYDATA;


implementation

procedure TFORM_SENHA.WMCopyData(var Msg: TWMCopyData);
begin
   FORM_SENHA.Show;
   Application.BringToFront;
   FORM_SENHA.WindowState := wsMaximized;
end;





Abraços.
Responder

10/09/2020

Celso Lenon

Muito Top este link Celso, consegui fazer estudando este exemplo.

Para quem precisar vou simplificar meu exemplo

No arquivo .DPR
uses
  Messages;

 var handle: Thandle;
 var copyDataStruct: TCopyDataStruct ;
begin

handle := FindWindow('TFORM_SENHA',nil);
if handle<>0 then begin
  SendMessage(handle, WM_COPYDATA, Integer(handle), Integer(@copyDataStruct)) ;
end   Else     begin
      Application.Initialize;
...
end;



onde TFORM_SENHA é o formulário que estou buscando.


Já no formulário TFORM_SENHA
  private
       procedure WMCopyData(var Msg : TWMCopyData) ; message WM_COPYDATA;


implementation

procedure TFORM_SENHA.WMCopyData(var Msg: TWMCopyData);
begin
   FORM_SENHA.Show;
   Application.BringToFront;
   FORM_SENHA.WindowState := wsMaximized;
end;





Abraços.

Top seu Exemplo!!!
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar