Fórum Como nao abrir um sistema mais de uma vez ? #193829

09/11/2003

0

Alguem pode me passar uma rotina para que o usuario nao abra o sistema duas ou mais vezes, e que realmente funcione. Tenho usado algumas que se encontram nos DeplhiBoy, DeplhiMax, etc. mas nao funciona... O meu Delphi e´ o 5 Trial, e meu Windows é 95 (nos clientes tambem).

Diante mao ja´ agradeco as ajudas...


Adonis

Adonis

Responder

Post mais votado

09/11/2003

Tente assim:

program Project1;

uses
  Forms,
..
..
..
{$R *.RES}

var
  Handle: THandle;
begin
  Handle := FindWindow(´TFrmPrincipal´, nil);
  if Handle <> 0 then { Já está aberto }
      begin
      Application.MessageBox(´Este programa já está aberto.´, ´Programa já aberto´, MB_OK);
      Exit;
      end;

  Application.Initialize;
  Application.CreateForm(TFrmPrincipal, FrmPrincipal);
  Application.CreateForm(TFrmConfirma, FrmConfirma);
  Application.Run;
end.



Fabio.hc

Fabio.hc
Responder

Gostei + 1

Mais Posts

11/11/2003

Adonis

Fabio,

Esta e´ um dos exemplos que eu uso que nao da´ certo.
O meu esta´ assim:

{$R *.RES}

var
Hwnd: Thandle;
begin
Application.Title := ´Controle de Estoque´;
Application.HelpFile := ´´;
Hwnd := FindWindow(´FTelaPrin´,´TelaPrin´);
if Hwnd = 0 then begin
Application.Initialize;
FSplash := TFSplash.Create(application);
FSplash.Show;
FSplash.Update;
Application.CreateForm(TFTelaInic, FTelaInic);
Application.CreateForm(TFTelaPrin, FTelaPrin);
Application.CreateForm(TFSenha, FSenha);
Application.CreateForm(TDTabelas, DTabelas);
Application.Run;
end else begin
messagedlg(´O sistema já foi Inicializado!´,mtinformation,[mbok],0);
SetForegroundWindow(Hwnd);
end;

Ja´ tentei de tudo e nada. Mudo o TelaPrin para: FSenha, DTabelas, TelaInic, e nada. Use com ´nil´ como o seu exemplo e nada.
O meu sistema comeca com a TelaInic, que chama o Senha e depois para no TelaPrin. Observe que o Splash e´ carregado antes mesmo do TelaInic.

Agradeco alguma ajuda...


Responder

Gostei + 0

11/11/2003

Koplin

Usar um Mutex é mais eficiente.

Dá uma olhada neste dpr:


program Project1;

uses//acrescente as q não tiverem no seu
Forms, SysUtils, Windows, Classes, Dialogs,
Unit1 in ´Unit1.pas´ ;

var aMutex:THandle;//crie esta var...

{$R *.res}

begin //aqui qqr identificação
amutex:=OpenMutex(MUTEX_ALL_ACCESS,False,´ABCDEF123´);
If aMutex = 0 then begin//aqui =acima
aMutex:=CreateMutex(nil,false,´ABCDEF123´);
//só avança se não houver outro aberto...
Application.Initialize;//trecho original
Application.CreateForm(TForm1, Form1);
Application.Run;
end else //acrescente...
ShowMessage(´Já estou no ar!´);
end.


Responder

Gostei + 0

11/11/2003

Valdir.santos

Ou tenta assim:

{$R *.res}

var Hwnd : THandle;
begin
Hwnd := FindWindow(´TApplication´, ´Sistema de Protocolo´);
if Hwnd = 0 then begin
Application.Initialize;
frmSplash := TFrmSplash.Create(Application);
frmSplash.Show;
frmSplash.Refresh;
Application.Title := ´Sistema de Protocolo´;
Application.CreateForm(TfrmPrincipal, frmPrincipal);
Application.Run;
SetForegroundWindow(Hwnd);
end
else begin
ShowMessage(´Programa já está sendo executado´);
SetForegroundWindow(Hwnd);
end;
end.


Responder

Gostei + 0

11/11/2003

Drix

vasculhe na Net por componentes cool. entre eles vc ira encontrar o componente coolOne.
Apenas coloque-o em seu form principal e configure. Ele exibe uma mensagem caso tente abrir o aplicativo mais de uma vez ou simplesmente ativa e coloca o mesmo em primeiro plano.
Tente localizar em: [url]www.superdownloads.com.br[/url].

Ate mais....
DRIx


Responder

Gostei + 0

11/11/2003

Beppe

Usar um Mutex é mais eficiente. Dá uma olhada neste dpr: program Project1; uses//acrescente as q não tiverem no seu Forms, SysUtils, Windows, Classes, Dialogs, Unit1 in ´Unit1.pas´ ; var aMutex:THandle;//crie esta var... {$R *.res} begin //aqui qqr identificação amutex:=OpenMutex(MUTEX_ALL_ACCESS,False,´ABCDEF123´); If aMutex = 0 then begin//aqui =acima aMutex:=CreateMutex(nil,false,´ABCDEF123´); //só avança se não houver outro aberto... Application.Initialize;//trecho original Application.CreateForm(TForm1, Form1); Application.Run; end else //acrescente... ShowMessage(´Já estou no ar!´); end.


Mesmo usando mutexes, será preciso chamar FindWindow para trazer o sistema para frente...

Ataliba


Responder

Gostei + 0

13/11/2003

Adonis

Agradeco a todas as ajudas acima. Vou estuda-las...


Responder

Gostei + 0

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

Aceitar