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

Monitorar processo ou executável


Cleverson Honório Gouvêa

Pergunta

Aew galera, é o seguinte... eu preciso de uma idéia de como fazer isso:

Tenho uma aplicação com um módulo principal que controla todos os meus aplicativos, preciso que

quando um aplicativo meu estiver rodando, a minha aplicação receba um "enable := false" e só volte

para true quando esse processo for finalizado...

Isso para que o usuário não saia abrindo vários aplicativos diferentes...

Os meus aplicativos já não podem ser abertos se o módulo principal não estiver aberto...

Será que alguém pode me auxiliar !?

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Opa

O que você pode fazer é usar Mutex ou Semáforos...

eu aconselho Mutex e acredito que desta forma voce não precisa de um controlador, tipo um monitor como havia mencionado...

exemplo, nos seus aplicativos voce coloca, em todos eles...

function MutexExiste(const szMagic: String): Boolean;
var
  hMutex: THandle;
begin
  hMutex := CreateMutex(nil, True, PChar(szMagic));
  Result := LongBool(hMutex) and (GetLastError = ERROR_ALREADY_EXIST);
  if LongBool(hMutex) then
  CloseHandle(hMutex);
end;
Coloque o código abaixo no fonte do seu programa, através do menu "Project > View Source" logo na primeira linha depois do begin...
var
  hMutex: THandle;
begin
  if MutexExiste('palavra_magica') then
  begin
    //já tem um aplicativo rodando e faz o que deseja fazer, tipo uma mensagem sei la
    Halt;
  end;

  //não tem nenhum aplicativo rodando, então podemos rodar esse e bloquear os proximos
  hMutex := CreateMutex(nil, True, 'palavra_magica');

  //Descomenta abaixo caso queira tratar se der erro ao criar mutex, nunca aconteceu comigo rs
  //if hMutex = 0 then
  //deu erro então faca o que termine o aplicativo com um Halt? :(
  
  Application.CreateForm...
  ...
  Application.Initialize;
  Application.Run;

  //aqui o programa esta se fechando, vamos liberar para ser possivel abrir outro programa...
  CloseHandle(hMutex);

end.

Troque a palavra magica por algo seu, tipo sei la nome do seu cachorro, só não coloque caracteres especiais tipo acento, virgula, e tal, usa texto limpo e sem traços, underline pode tipo "script_brasil"

Lembrando que pra todos os programas precisa ser a mesma palavra mágica, o segredo é que ela vai ser armazenada na memória e quando outro programa seu abre, a funcao MutexExiste retorna que já ta armazenada, ou seja, já tem algum outro programa seu aberto e não permite a execução...

espero que tenha entendido rs

abraxx

Editado por Churc
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
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...