solução p/ executar somente uma vez o aplicativo

Delphi

17/11/2004

fala doutores,

peguei o seguinte código. em um site e implementei no meu projeto, só q quando tento executar o aplicativo pelo delphi este entra no [i:5cd952395a][b:5cd952395a]else[/b:5cd952395a][/i:5cd952395a] e me envia a mensagem q já está inicializado, gostaria de saber se há erro no código ??? e o q eu faria p/ funcionar ???
segue uma parte do código:

[b:5cd952395a]{$R *.res}

var Hist : HWND;

begin
// Application.Initialize;
Hist := FindWindow(Nil, PChar(´Fidelizando´));
if Hist = 0 then
begin
Application.Title := ´Fidelizando´;
Application.CreateForm(TFLogin, FLogin);
Application.CreateForm(TFPrincipal, FPrincipal);
Application.CreateForm(TDMDados, DMDados);
.
.
.
Application.Run;
end
else
messagedlg(´O sistema já foi inicializado!´,mtinformation,[mbok],0);
end.[/b:5cd952395a]

Att, Maiki Perin.


Maikiperin

Maikiperin

Curtidas 0

Respostas

Gandalf.nho

Gandalf.nho

17/11/2004

Tente executar de fora do Delphi, ele deve estar considerando as janelas abertas na própria IDE do Delphi.


GOSTEI 0
Massuda

Massuda

17/11/2004

Não tenho certeza, mas acho que o primeiro parâmetro do FindWindow não pode ser nil. Ele deveria ser o nome da classe da janela que está sendo procurada.

No seu caso, acho que
Hist := FindWindow(´TApplication´, PChar(´Fidelizando´)); 

resolve o problema.


GOSTEI 0
Massuda

Massuda

17/11/2004

Hist := FindWindow(´TApplication´, PChar(´Fidelizando´)); 

Desculpe, o certo seria
Hist := FindWindow(PChar(´TApplication´), PChar(´Fidelizando´)); 



GOSTEI 0
Aroldo Zanela

Aroldo Zanela

17/11/2004

Colega,

Veja a solução do [url=http://delphiforum.icft.com.br/forum/viewtopic.php?t=36544]Cebikyn[/url]


GOSTEI 0
Massuda

Massuda

17/11/2004

Só para complementar, se inglês não for problema:[list:ddceeff6ff][*:ddceeff6ff]uma boa discussão sobre o assunto com a apresentação de diferentes formas de implementar isso é [url=http://delphi.about.com/od/windowsshellapi/l/aa100703a.htm]Controlling the number of application instances[/url].[*:ddceeff6ff]O uso do mutex tem um pequeno detalhe com relação ao nome do mutex que pode ser útil quando você está lidando com [i]terminal services[i] e, no Windows XP, com múltiplos usuários logados na mesma máquina ao mesmo tempo (veja detalhes no [url=http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/createmutex.asp]MSDN[/url])[/list:u:ddceeff6ff]


GOSTEI 0
Maikiperin

Maikiperin

17/11/2004

agradeço pela ajuda dos colegas e gostaria de citar q a solução do [b:4744c75a15]Cebikyn[/b:4744c75a15] funcionou perfeitamente....segue a solução p/ alguém q necessite deste procedimento.

{$R *.res}

[b:4744c75a15]begin
Application.Initialize;
CreateMutex(nil, True, ´CodigoParaExcucaoUnicaDoAplicativo´);
if GetLastError = ERROR_ALREADY_EXISTS then
begin
messagedlg(´O sistema já foi inicializado!´,mtinformation,[mbok],0);
exit;
end;
Application.Title := ´Fidelizando´;
Application.CreateForm(TFLogin, FLogin);
Application.CreateForm(TFPrincipal, FPrincipal);
Application.CreateForm(TDMDados, DMDados);
.
.
.
[/b:4744c75a15]


Att, Maiki Perin.


GOSTEI 0
POSTAR