Process e ProcessBuilder

4 respostas
M

Olá a todos, estava procurando um jeito de descobrir se determinado programa do windows estáva rodando, e descobrir o Process e Processbuilder, para abrir o bloco de notas por exemplo, eu fiz isso:

ProcessBuilder builder = new ProcessBuilder("notepad.exe");  

try {  
    Process process =   builder.start();  
      
} catch (Exception e) {  
    // TODO: handle exception  
    e.printStackTrace();  
}

mais agora, o que eu quero, e descobrir um jeito de ver se o bloco de notas ja esta aberto, tem como fazer isso usando process, se nao tiver, qual seria o melhor caminho para fazer isso?

Desde já agradeço a todos pela atenção.

vlw

4 Respostas

D

Qual Windows?

A partir do XP vc pode usar o “comando” tasklist p/ obter a lista de processos que estão sendo executador. Acho que o Win2k tbm tem esse comando…

Vc pode chamar assim:

ProcessBuilder builder = new ProcessBuilder("tasklist.exe /fo csv /nh");

/fo define o formato, no caso CSV (valores separados por vírgula) e /nh diz que não deve imprimir o cabeçalho das colunas.

Ai basta vc ler a saída do comando e fazer o parse do texto.

P/ informações sobre manipulação de processos externos ao Java (o tasklist vai ser um deles), recomendo o seguinte artigo: http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html

[]´s

M

amigo, eu fiz o seguinte:

ProcessBuilder builder = new ProcessBuilder("tasklist.exe /fo csv /nh");
		Process process;
		try {
			process = builder.start();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}

e de todas a formas que eu tento fazer o parse pra string, ele dispara exception

D

Crie um método com o código que estou te passando p/ vc poder reaproveitar.
LEIA o artigo que te passei o link. Vc não leu, por isso não conseguiu.

import java.io.*;
import java.util.*;

public class Teste {

    public static void main( String[] args ) {

        // flag para indicar se encontrou o processo especificado
        boolean encontrou = false;

        // nome do processo a ser buscado
        String nomeProcesso = "notepad.exe"
        
        try {
            
            // executa o processo
            Process p = Runtime.getRuntime().exec( "tasklist /fo csv /nh" );
            
            // cria um scanner com base no InputStream do processo
            Scanner scan = new Scanner( p.getInputStream() );
        
            // enquanto tem linhas do scanner    
            while ( scan.hasNextLine() ) {
                
                // imprime a linha (pode tirar depois...)
                System.out.println( scan.nextLine() );
                
                // verifica se na linha especificada existe o nome do processo
                // e atribui a "encontrou"
                encontrou = scan.nextLine().contains( nomeProcesso );
                
                // poderia verificar se encontrou e quebrar o while,
                // mas o ideal é consumir TODA a saída do processo.
                
            }
                
        } catch ( IOException exc ) {
            exc.printStackTrace();
        }
        
        // imprime true se encontrou o processo, falso caso contrário.
        System.out.println( encontrou );
        
        
    }
    
    
}

[]´s

M

realmente eu tinha lindo, tenho um pouco de dificuldade com ingles, muito pelo codigo que voce me passo,
e eu li o tuto que voce me passo(com a ajuda do google tradutor).

vlw msm pela ajuda amigo.

Criado 11 de agosto de 2010
Ultima resposta 11 de ago. de 2010
Respostas 4
Participantes 2