Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
djjoaoalfredo

Verificar se um programa está em execução

Recommended Posts

Olá,

Sou novo no fórum e também em programação, gostaria de saber como faço para verificar se um programa já esta em execução e se ele está respondendo.

Por exemplo, se a calculadora esta aberta no computador, ou se o internet explorer está aberto e a pagina respondendo.

Eu utilizo o Eclipse.

Motivo: eu criei um "robô" simulando um teclado e mouse para coletar informações de um programa aqui da empresa (de forma legal, apenas para agilizar), porém, as vezes o programa que eu faço a consulta trava (fica lento as vezes pela internet estar lenta), eu utilizo  o robot.delay para criar um tempo de espera, mas eu gostaria de agilizar o processo fazendo uma verificação se  o programa está respondendo.

att

João

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde.

 

Para fazer esse tipo de coisa em Java, você consegue verificar se o programa está sendo executado mas não existe nada que você possa fazer em Java para descobrir se ele está respondendo. Se o seu robô consegue interagir com o  programa para capturar dados, você pode fazer um método em que o robô execute uma operação específica  e que ele receba sempre uma resposta padrão para o teste. Se receber, o programa está respondendo. Se não receber depois de X tempo, o programa travou.

 

Para verificar se um programa está rodando, podemos usar o wmic do Windows e especificar o nome do .exe que você quer verificar.

 

private void verificaProcesso() {
        String line;
        int instances = 0;
        try {
            Process processo = Runtime.getRuntime().exec("wmic.exe");
            try (BufferedReader br = new BufferedReader(new InputStreamReader(processo.getInputStream()))) {
                OutputStreamWriter osw = new OutputStreamWriter(processo.getOutputStream());
                osw.write("process where name='chrome.exe'");
                osw.flush();
                osw.close();
                while ((line = br.readLine()) != null) {
                    if (line.contains("chrome.exe")) {
                        instances++;
                    }
                }
                System.out.println("Existem " + instances + " processos chrome.exe rodando");
            }
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }

Nesse caso, atribuímos um processo com o Runtime.getRuntime().exe(), buscando o programa wmic.exe do Windows.

 

Depois, escrevemos nossa "pesquisa" no processo usando o OutputStreamWriter onde buscamos por "process where name = 'chrome.exe'". Nesse caso, eu busquei pelo programa chrome.exe.

 

Se existir alguma linha de processo que contenha chrome.exe, instances será incrementado em 1 toda vez que ele for encontrado.

 

Depois, eu imprimi no console quantas vezes esse processo apareceu. No seu caso, verifique se instances for igual a 1 (creio que só deva existir uma instância desse programa funcionando, certo?), você executa a verificação do robô para ver se o programa está respondendo.

 

Mais específico que isso, apenas com programação em C/C# e JNI.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora
Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×