Executar aplicção somente uma vez

Delphi

04/04/2008

Fiz esse código no meu .DPR, e sempre que rodo dá, dá a mensagem de que já existe uma aplicação rodando, quando na verdade é a primeira vez. Alguém sabe o devo fazer para a aplicação rodar somente uma vez?

Var HprevHist : HWND; begin Application.Initialize; HprevHist := FindWindow(Nil, PChar(´DM_Principal´)); if HprevHist = 0 then begin Application.CreateForm(TDM_Principal, DM_Principal); Application.CreateForm(TDM_PDV, DM_PDV); Application.CreateForm(TFRM_Menu, FRM_Menu); Application.CreateForm(TFrmAvisoEcf, FrmAvisoEcf); Application.Run; end else MessageDlg(´Você não pode executar outra cópia do aplicativo´, mtInformation, [mbOK], 0); end.



Paulo

Paulo

Curtidas 0

Respostas

Catunda

Catunda

04/04/2008

Vc testou com o projeto aberto no delphi?
Isso acontece comigo se eu tentar rodar o sistema e o projeto estiver aberto tb. É preciso ao menos fechar o form que vc está testando.


GOSTEI 0
Paulo

Paulo

04/04/2008

Continua não funcionar. Minha aplicaca se chama SAC_PDV, e os form criados no Auto Create são:
DM_Principal,
DM_PDV,
FRM_Menu,
FrmAvisoEcf
O que devo fazer então? Já coloquei pelo nome da aplicação, pelo nome dos forms, dou um Close All no delphi, para fechar tudo, mas ainda diz ou que já está rodando, ou então permite abrir várias vezes.


GOSTEI 0
Comodelphi

Comodelphi

04/04/2008

Faça uma pesquisa no fórum sobre MUTEX.


GOSTEI 0
Rodc

Rodc

04/04/2008

MUTEX é a melhor opção, pois ele avisa até se o programa estiver aberto em outra sessão do Windows.


GOSTEI 0
Catunda

Catunda

04/04/2008

Experimente assim: Obseve o uso da variavel Hwnd e a forma do FindWindow

Var Hwnd : Thandle;

begin
Hwnd := FindWindow(´TDM_Principal´,nil);
if Hwnd>0 then
begin
ShowMessage(´O sistema já se encontra em execução !!´);
SetForeGroundWindow(Hwnd);
Application.Terminate;
end
else
begin
Application.Initialize;
Application.CreateForm(TDM_Principal, DM_Principal);
Application.CreateForm(TDM_PDV, DM_PDV);
Application.CreateForm(TFRM_Menu, FRM_Menu);
Application.CreateForm(TFrmAvisoEcf, FrmAvisoEcf);
Application.Run;
end;
end.


GOSTEI 0
Paulo

Paulo

04/04/2008

Segui as sugestões acima e utilizei o MUTEX e gostei. Eu não o conhecia. Ele é prático, pois não depende de nome de janelas.


GOSTEI 0
POSTAR