Verificar se exe já está aberto então mostrar ao usuário
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.
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
Curtidas 0
Melhor post
Celso Lenon
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.
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.
GOSTEI 1
Mais Respostas
Pedro Deola
09/09/2020
Muito Top este link Celso, consegui fazer estudando este exemplo.
Para quem precisar vou simplificar meu exemplo
No arquivo .DPR
onde TFORM_SENHA é o formulário que estou buscando.
Já no formulário TFORM_SENHA
Abraços.
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.
GOSTEI 1
Celso Lenon
09/09/2020
Muito Top este link Celso, consegui fazer estudando este exemplo.
Para quem precisar vou simplificar meu exemplo
No arquivo .DPR
onde TFORM_SENHA é o formulário que estou buscando.
Já no formulário TFORM_SENHA
Abraços.
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!!!
GOSTEI 0