Executando uma aplicação somente uma vez
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.
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
Curtidas 0
Respostas
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
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??
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
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]
[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
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!
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