Fórum Limitar execução #322723

01/06/2006

0

ola pessoal,

eu estava querendo travar o meu exe para abrir somente 2 vezes... tem como ? eu consegui um codigo na internet pronto.... só que eu não entendi nada... a unica coisa que sei foi que ele so deixa abrir 1 vez e nao deixa mais nada... eu queria limitar a quantidade de acessos simultaneos... alguem poderia me ajudar?

vejam o codigo que eu coloquei no meu projeto.


var
  Handle: THandle;

begin

  Handle := FindWindow(´TfrmPrincipal´, nil);
  if Handle <> 0 then begin
    Application.MessageBox(´Por Segurança, não é permitido abrir o mesmo programa duas vezes. A Execução ´ +
      ´anterior será ativada.´, ´Segurança do Sistema´, MB_OK);
    if not IsWindowVisible(Handle) then
      ShowWindow(Handle, SW_RESTORE);
    SetForegroundWindow(Handle);
    Exit;
  end;
  Application.Initialize;
  FrmLogin := TfrmLogin.Create(Application);
  FrmLogin.ShowModal;
  Application.Title := ´Digidocs´;
  Application.Run;



Fernando_cunha

Fernando_cunha

Responder

Post mais votado

02/06/2006

[b:269c973e8d]uses Windows e Dialogs[/b:269c973e8d]

No projeto Faça :

program Project1;

uses
  Forms,
  Windows,Dialogs,
  Unit1 in ´Unit1.pas´ ;

{$R *.res}

var
AbrirCopia:Boolean;

begin
try
   AbrirCopia:=False;
   CreateMutex(nil, True, ´COPIA´);
   if not (GetLastError = ERROR_ALREADY_EXISTS) then
     abrirCopia:=True
   else
     begin
       CreateMutex(nil, True, ´COPIA2´);
       if not (GetLastError = ERROR_ALREADY_EXISTS) then
          abrirCopia:=True
       else
         begin
           CreateMutex(nil, True, ´COPIA3´);
           if not (GetLastError = ERROR_ALREADY_EXISTS) then
             AbrirCopia:=True
         end;
     end;
finally
  begin
    if AbrirCopia Then
      begin
        Application.Initialize;
        Application.CreateForm(TForm1, Form1);
        Application.Run;
      end
    else
      begin
        showmessage(´Mensagem qualquer´);
        application.Terminate;
      end;
    end;
end;
end.



Marco Salles

Marco Salles
Responder

Gostei + 1

Mais Posts

01/06/2006

Beppe

Este código (sólito) não serve, por que não conta, só verifica a existência. Precisará de átomos ou semáforos. Amanhã te posto uma solução, estou sem Delphi aqui.


Responder

Gostei + 0

02/06/2006

Aroldo Zanela

Colega,

Eu não entendi claramente o que você deseja. No caso do código acima, serve apenas para verificar se já existe uma instância em execução (processo) e ainda assim, seria mais eficiente o uso de Mutex. Minha dúvida é: - Você precisa fazer uma programa demo que possa ser executado apenas duas vezes?


Responder

Gostei + 0

02/06/2006

Fernando_cunha

O que eu tenho hoje, é que ele verifica se já esta aberta a aplicação e nao deixa abrir novamente....

eu queria que ele verifica se ja esta aberto, quantas vezes esta aberta... exemplo ( 3vezes ) ... eu queria abrir o exe 3 vezes, se abrir de novo ai sim ele da o erro que não posso abrir


Responder

Gostei + 0

02/06/2006

Paullsoftware

você pode por exemplo criar um arquivo ini no mesmo diretório do seu aplicativo e sempre que seu sistema abrir ele verificar um contador que vc pode criar dentro desse arquivo quando atingir a quantidade desejada ele informar ao usuário que não é permitido abrir mais de x vezes o sistema ao mesmo tempo:

[Config] Contador = 1 Micro = Estacao2 Hora = 08:00:00 Dia = 12/01/2006


todas as vezes que seu sistema inicializar ele deve verificar esse arquivo e aplicar as proteções necessárias... :wink:


Responder

Gostei + 0

02/06/2006

Cristiano Alves

A solução do colega Paulo Ricardo funciona. Só não se esqueça de decrementar o contador ao encerrar o aplicativo.
[]s


Responder

Gostei + 0

02/06/2006

Fernando_cunha

Olá. esta dica do Marco Salles deu certo hehe.

obrigado pessoal

vlw


Responder

Gostei + 0

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

Aceitar