Fórum Como abir aplicação somente uma vez #403536
22/06/2011
0
program Vendas;
uses
Forms,
Windows,
Dialogs,
uPrincipal in 'uPrincipal.pas' ,
uDMPrincipal in 'uDMPrincipal.pas' {DM: TDataModule},
uModeloCadastro in 'uModeloCadastro.pas' ;
{$R *.res}
var
HprevHist: HWND;
begin
Application.Initialize;
// Evita carga dupla da aplicação
begin
HprevHist:= FindWindow(Nil, PChar('Vendas'));
if HprevHist <> 0 then
begin
ShowMessage('O Sistema já está aberto!');
Application.Terminate;
ShowWindow(HprevHist,SW_NORMAL);
Exit;
end;
end;
Application.MainFormOnTaskbar := True;
Application.Title := 'Sistema de Vendas';
Application.CreateForm(TDM, DM);
Application.CreateForm(TfrmPrincipal, frmPrincipal);
Application.CreateForm(TfrmModelo, frmModelo);
Application.Run;
end.
Adilson Rumao
Curtir tópico
+ 0Posts
22/06/2011
Eliel Martins
No .dpr você pode fazer da seguinte forma :
var
HprevHist : HWND;
Begin
frmSplash := TfrmSplash.Create(Application);
frmSplash.Show;
frmSplash.Update;
sleep(5);
HprevHist := FindWindow(Nil, PChar('NOME_SISTEMA'));
if HprevHist = 0 then begin
Application.Title := 'NOME_SISTEMA';
frmSplash.Hide;
frmSplash.Close;
frmSplash.Free;
Application.CreateForm(TfrmPrincipal, frmPrincipal);
Application.Run;
end else
Application.MessageBox(Pchar('O Aplicativo já esta sendo Executado '), 'Erro.', MB_ICONERROR);
end.
Dessa forma você consegue controlar se o sistema já está sendo executado.
Espero ter ajudado.
Eliel G. Martins
Gostei + 0
22/06/2011
Adilson Rumao
program Vendas;
uses
Forms,
Windows, Messages,
uPrincipal in 'uPrincipal.pas' ,
uDMPrincipal in 'uDMPrincipal.pas' {DM: TDataModule},
uModeloCadastro in 'uModeloCadastro.pas' ;
{$R *.res}
var
HprevHist : HWND;
begin
HprevHist := FindWindow(Nil, PChar('Vendas'));
if HprevHist = 0 then
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.Title := 'Sistema de Vendas';
Application.CreateForm(TDM, DM);
Application.CreateForm(TfrmPrincipal, frmPrincipal);
Application.CreateForm(TfrmModelo, frmModelo);
Application.Run;
end else
Application.MessageBox(Pchar('Sistema já está em execução!'), 'Erro', MB_ICONERROR);
end.
Gostei + 0
23/06/2011
Leandro Carvalho
Inclusive na Revista Clube Delphi Ed. 43 tem um artigo sobre ele.
Gostei + 0
23/06/2011
Marco Salles
aplicativo rodando na máquina .. Mutex
Gostei + 0
27/12/2011
Adilson Rumao
var
MutexHandle: THandle;
hwind:HWND;
begin
MutexHandle:= CreateMutex(nil,True,AppVendas);
if MutexHandle 0 then
begin
if GetLastError = ERROR_ALREADY_EXISTS then
begin
MessageBox(0,Sistema aberto em outra Janela!,,mb_IconHand);
CloseHandle(MutexHandle);
hwind:=0;
repeat
hwind:= Windows.FindWindowEx(0,hwind,TApplication,AppVendas);
until(hwindApplication.Handle);
if (hwind0) then
begin
Windows.ShowWindow(hwind,SW_SHOWNORMAL);
Windows.SetForegroundWindow(hwind);
end;
Halt;
end
end;
Está funcionando, a única coisa é que ele não abre a instância que já está aberta, ele dá a mensagem normalmente. Só não consegui resolver isso.
Gostei + 0
05/05/2013
José
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)