GARANTIR DESCONTO

Fórum Executar aplicção somente uma vez #356605

04/04/2008

0

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

Responder

Posts

04/04/2008

Catunda

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.


Responder

Gostei + 0

04/04/2008

Paulo

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.


Responder

Gostei + 0

04/04/2008

Comodelphi

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


Responder

Gostei + 0

04/04/2008

Rodc

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


Responder

Gostei + 0

05/04/2008

Catunda

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.


Responder

Gostei + 0

07/04/2008

Paulo

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.


Responder

Gostei + 0

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

Aceitar