Não Abrir o mesmo executavel

Delphi

26/05/2005

Ola Pessoal alguem poderia me ajudar com algum exemplo que não permita que se abra o mesmo programa no mesmo computador ? ou seja não abrir o mesmo .exe. Valeu


Luisjunior

Luisjunior

Curtidas 0

Respostas

Steve_narancic

Steve_narancic

26/05/2005

utilize a Função [b:9eb7946be2]FindWindow[/b:9eb7946be2]


GOSTEI 0
Facc

Facc

26/05/2005

utilize a Função [b:ee4d8dea39]FindWindow[/b:ee4d8dea39]


Como eu uso essa função?


GOSTEI 0
Steve_narancic

Steve_narancic

26/05/2005

No código do Projeto coloque:

 
  if FindWindow(Nil,´Nome do Programa´) = 0 
  then
  begin
  //Executa
  end
  else
    MessageDlg(´O Sistema já está (ou ainda está) sendo Executado. Verifique !!!´, mtInformation, [mbOK], 0);



GOSTEI 0
Vagner.oliveira

Vagner.oliveira

26/05/2005

não entendi :shock:

em qual momento do programa ?
tenho outra dúvida uso um form_splash, como posso usá-lo ?


GOSTEI 0
Marco Salles

Marco Salles

26/05/2005

Opção muito boa<

[b:b4bac00295]Create Mutex[/b:b4bac00295]

Inclua no seu Arquivo Dpr Principal a Segunte Instrução :

  CreateMutex(nil, True, ´XyZzWw´); 
  if GetLastError = ERROR_ALREADY_EXISTS then 
    Exit; 


exemplo:

program NomeDoProgrma; 

uses 
  Principal in ´Principal.pas´ , 
  

  { Mais alguns formulários... } 

  Login in ´..\comum\Login.pas´ ; 

{$R *.RES} 

begin 
  CreateMutex(nil, True, ´XyZzWw´); 
  if GetLastError = ERROR_ALREADY_EXISTS then 
    Exit; 
//  bla bla bal.... 
  Application.Run; 
end.



GOSTEI 0
Vagner.oliveira

Vagner.oliveira

26/05/2005

informa que não foi declarada as variáveis:

[b:d23d63d316]CreateMutex[/b:d23d63d316]
nem a
[b:d23d63d316]ERROR_ALREADY_EXISTS[/b:d23d63d316]


GOSTEI 0
Vetorzero

Vetorzero

26/05/2005

Este é o ´dpr´ de um de meus programas... e é assim que funciona... não permite que o programa seja aberto duas vezes em uma mesma máquina... veja o que falta para implentar seu programa e utilize.

É isto.

Augusto Vieira

program Sobenca;

uses
  Forms,
  Windows,
  fMenu in ´fMenu.pas´ ,
  fCadastro in ´fCadastro.pas´ ,
  fAssociados in ´fAssociados.pas´ ,
  fCritica in ´fCritica.pas´ ,
  fBoletasR in ´fBoletasR.pas´ ,
  fBoletasOpte in ´fBoletasOpte.pas´ ;

{$R *.RES}

var SpSenha : TF_Senha;
    Handle : THandle;

begin
  Handle := CreateMutex(nil,True,´TF_Menu´);
  if GetLastError = ERROR_ALREADY_EXISTS then begin
     Application.MessageBox(´Este programa já está aberto !´, ´Atenção !´, mb_Ok);
     if not IsWindowVisible(Handle) then begin
        ShowWindow(Handle, SW_RESTORE);
        SetForegroundWindow(Handle);
     end;
     if Handle <> 0 then CloseHandle(Handle);
        exit;
  end;
  Application.Initialize;
  SpSenha := TF_Senha.Create(Application);
  Application.Title := ´Sobenca´;
  Application.CreateForm(TF_Menu, F_Menu);
  Application.CreateForm(TF_Importa, F_Importa);
  Application.CreateForm(TF_Senha, F_Senha);
  Application.CreateForm(TF_Rotinas, F_Rotinas);
  Application.CreateForm(TF_Exporta, F_Exporta);
  Application.CreateForm(TF_Critica, F_Critica);
  SpSenha.ShowModal;
  SpSenha.Close;
  SpSenha.Free;

  Application.Run;
end.



GOSTEI 0
Marco Salles

Marco Salles

26/05/2005

Desculpe amigo , eu esqueci de mencionar que é necessario declarar na secção usse do seu Arquivo Dpr as Units Forms, Windows, Dialogs

Assim corrija:

program NomeDoProgrma; 

uses
  Forms,   // Inclua *************
   Windows,  // Inclua *************
   Dialogs      // Inclua *************
  Principal in ´Principal.pas´ , 
  

  { Mais alguns formulários... } 

  Login in ´..\comum\Login.pas´ ; 

{$R *.RES} 

begin 
  CreateMutex(nil, True, ´XyZzWw´); 
  if GetLastError = ERROR_ALREADY_EXISTS then 
    Exit; 
//  bla bla bal.... 
  Application.Run; 
end.



GOSTEI 0
Aurino003

Aurino003

26/05/2005

Essa dica é muito boa! :D

Funciona perfeitamente.

Obrigado


GOSTEI 0
POSTAR