Executando uma aplicação somente uma vez

Delphi

02/10/2005

Pessoal,
Tenho uma rotina que verifica se um executável já está rodando...
Mas só funciona (funcionava) no W98.

Hwnd := FindWindow (´TFrmMain´,´BlaBlaBla´);
if Hwnd <> 0 then
....


Alguém sabe como fazer isto para W2000 ou XP?

Grato.


Del

Del

Curtidas 0

Respostas

Sabah

Sabah

02/10/2005

Clique no menu Project do Delphi e selecione a Opção View Source - Aí vc poderá alterar o código-fonte do seu *.dpr:

program MeuSistema;

uses
Forms,Windows,
Principal in ´Principal.pas´ ;

{$R *.RES}

begin
{Se já estiver rodando, interrompe a execução...}
if FindWindow( nil,´Meu Sistema v 1.25´ ) <> 0 then
begin
Application.Terminate;
Exit;
end;
Application.Initialize;
Application.CreateForm(TfrmPrincipal, frmPrincipal);
frmPrincipal.Caption := ´Meu Sistema v 1.25´;
Application.Run;
end.



GOSTEI 0
Del

Del

02/10/2005

Ok... Parece interessante.

Mas agora o aplicativo não roda de jeito algum.
(já fechei o Delphi, verifiquei no task manager se não há mais nada rodando...)

E agora?
Mais alguma sugestão??


GOSTEI 0
Kannalha

Kannalha

02/10/2005

Vc pode usar a seguinte rotina (roda em qualquer plataforma, pelo menos comigo funcionou em win98, winme, winxp, win2000):

[i:f237d86c9f][color=green:f237d86c9f] CreateMutex( nil, False, ´SISLAB´);

if GetLastError = ERROR_ALREADY_EXISTS then
begin
Application.MessageBox(´O programa já está em execução.´, ´Atenção´, MB_ICONEXCLAMATION );
Halt(0);
end;[/color:f237d86c9f][/i:f237d86c9f]


[]´s
[b:f237d86c9f]by KannalhA[/b:f237d86c9f]


GOSTEI 0
Del

Del

02/10/2005

Ok!

Esta rotina funciona.

Só vai uma dica para os outros que lêem esta mensagem:
(Complementando).


Uses
Windows, ----->> Incluir
Dialogs, ----->> Incluir
Unit1 in ´Unit1.pas´ ;

{$R *.res}
Var han : THandle;

begin

han := CreateMutex( nil, False, ´SISLAB´);

if GetLastError = ERROR_ALREADY_EXISTS then
begin
Application.MessageBox(´O programa já está em execução.´, ´Atenção´, MB_ICONEXCLAMATION );
Halt(0);
end;


Valeu pessoal!
Obrigado!


GOSTEI 0
POSTAR