Ir para conteúdo
Fórum Script Brasil
  • 0

Saber Se Já Está Executando


Ricardo_PF

Pergunta

Boa tarde,

alguém saberia me dizer se há uma maneira de saber se o sistema que eu fiz, quando abrir, detectar se já está em execução no mesmo computador.

Ou seja, não quero deixar que o usuário abra duas vezes o programa no mesmo computador.

Obrigado.

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

//Como saber se o aplicativo já foi aberto

//Insira o código abaixo dentro do arquivo .DPR de sua aplicação

{$R *.RES}

begin

Application.Title := ''; //coloque o titulo do aplicativo

Application.HelpFile := ''; //o arquivo de ajuda

if HPrevInst = 0 then

begin

F_Splash := TF_Splash.create(Application);

F_Splash.Show;

Application.CreateForm(TF_Menu, F_Menu);

Application.CreateForm(TF_Error, F_Error);

Application.CreateForm(TF_Form1, F_From1);

Application.CreateForm(TF_Form2, F_Form2j);

Application.Run;

end

else

messagedlg('O sistema já foi inicializado!',mtinformation,[mbok],0);

end.

Link para o comentário
Compartilhar em outros sites

  • 0

Hum... não consegui fazer funcionar dessa maneira.

Está rodando em Windows XP, pode ser por isso?

Pelo que notei, todas as vezes que eu executo o sistema o HPrevInst vale 0. Indiferente se o programa já foi aberto uma, duas ou mais vezes e está em execução.

Vlw.

Link para o comentário
Compartilhar em outros sites

  • 0

Ricardo_PF,

Costumo usar nos meus programas a idéia abaixo, que serve para o XP.

Veja se ajuda...

Crie um Mutex no seu .dpr, ou seja, clique no menu PROJECT, submenu VIEW SOURCE e coloque o código abaixo. É importante acrescentar na USES: Windows e Messages.

uses
  Forms,
  Windows,
  Messages,
....
....
var 
   hMutex:THandle;
   JanelaPrincipal:THandle;  //Variável que vai jogar a janela para frente se estiver escondida.
begin
   hMutex := 0;
   JanelaPrincipal:=FindWindow('TForm1','Aqui o caption da janela principal do programa');
 try
   hMutex := CreateMutex(nil, true, 'Só Chama uma vez');
   if GetLastError = ERROR_ALREADY_EXISTS then
      begin
         MessageBox(0,'O programa "coloque aqui o nome do seu programa" já se encontra em execução!'+#13+#10+'Não é necessário que este programa esteja aberto duas vezes.','PROGRAMA JÁ ABERTO',MB_IconExclamation);
         CloseHandle(hMutex);
      end
   else
     begin
        Application.Initialize;
        Application.CreateForm(...);//aqui depende de quantos forms estão sendo criados no seu programa.
        //coloque todas as criações aqui.
        Application.Run;
     end;
 finally
   ReleaseMutex(hMutex);
   SetForegroundWindow(JanelaPrincipal); // Função que coloca o form principal na frente de tudo.
 end;
end.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...