Verificar se exe já está aberto então mostrar ao usuário
09/09/2020
0
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
Post mais votado
10/09/2020
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
Mais Posts
10/09/2020
Pedro Deola
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.
10/09/2020
Celso Lenon
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!!!
Clique aqui para fazer login e interagir na Comunidade :)