hola amigos alguna funcion para refrescar tasklist gracias por sus aportes saludos

hola amigos alguna funcion para refrescar tasklist gracias por sus aportes saludos

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Tasklist es un comando y

Tasklist es un comando y muestra el resultado de su ejecucuion en pantalla, si quieres obtener una actualizacion del resultado simplemente ejecutalo de nuevo

ok gracias por el aporte XD

me fijare en que parte del codigo es donde deseo ejecutarlo gracias por el aporte

Lo de capturar la salida de

Lo de capturar la salida de tasklist para ver los procesos corriendo me sonó lo bastante interesante y lo suficientemente sencillo para hacer ( y lo suficientemente complejo para aprender algo nuevo).

Aquí esta el ejemplo de un programa que corre todo el tiempo y te dice que aplicacion se inició y cual terminó. Tiene, sin embargo el inconveniente de que no sabes que archivo se usó exactamente y lista todos los procesos, incluyendo algunos que windows usa internamente ( como rundll32.exe en el ejemplo para hacer previews )

package tasklist;

import java.io.*;
import java.nio.charset.Charset;
import java.util.*;
import static java.lang.ProcessBuilder.Redirect;
import static java.lang.System.out;

public class App extends TimerTask {

    public static void main( String ... args ) throws IOException {
        // create an app and execute it every 500 ms
        Timer timer   = new Timer();
        timer.schedule( new App() , 0, 500);
    }

    //Executes tasklist with column separated values format, excluding services and with no header
    private ProcessBuilder pb = new ProcessBuilder("tasklist","/FO","CSV","/FI","SESSIONNAME ne Services","/NH");

    // These are the processes running when the app starts
    private Set<String> base  = execute(pb);    

    //Get new processes and compare the diffs.
    //Report started and stopped processes
    public void run() {

        Set<String> result  = execute(pb);

        Set<String> started = diff(base, result);
        print("started", started);
        base.addAll(started);

        Set<String> stopped = diff(result, base);
        print("stopped", stopped);
        base.removeAll(stopped);
    }

    // Executes the command and copy the output to a string
    // then return a list of processes from that string.
    private final Set<String> execute( ProcessBuilder pb ) {
        try {
            // execute..
            Process p      = pb.start();
            InputStream in = p.getInputStream();
            ByteArrayOutputStream baos = new ByteArrayOutputStream();

            // copy output
            byte[] buffer = new byte[2048];
            long count = 0;
            int n = 0;

            while ( ( n = in.read(buffer)) != -1 ) {
                baos.write(buffer, 0, n );
                count += n;
            }
            p.destroy();
            // create a list from that output.
            return processesFrom( baos.toString("UTF-8") );
        } catch ( IOException ioe ) {/*in real world you don't just ignore exceptions.. but meh.*/}
        return null;// nor return null's
    }

    // Takes a CSV string anr return the commands present on it.
    private final Set<String> processesFrom(String p) {
        Set<String> set = new TreeSet<String>();

        for( String line : p.split("\n") ) {
            set.add( line.split(",")[0] );
        }
        return set;
    }

    // Returns the difference between two sets
    private Set<String> diff( Set<String> base, Set<String> delta) {
        TreeSet<String> newSet = new TreeSet<>(delta);
        newSet.removeAll( base );
        return newSet;
    }

    // Prints the given set ie: "gvim.exe started at xxxx"
    private void print(String label, Set<String> set ) {
        for(String e : set ) {
            out.printf("%s, %s at: %s%n", e, label, new Date());
        }
    }    
}

gracias por tu aporte OscarRyz saludosssss ¡ ¡¡ ¡ ¡¡¡ ¡¡ ¡

te agradezco mucho el aporte se ve muy completo el programa pero es justo lo que quería entender XD una despliegue del tasklist en tiempo real para estar monitoriando los procesos que se llevan acabo en la pc. XD desde java.

valla estuve buscando mucho en internet, miraba algunos ejemplos pero nada tan completo como este ya que los muchos ejemplos que abundan en internet, dicen de que como obtener la lista de procesos de la pc mediante java utilizando tasklist, pero el problema es que si cierras o abres un proceso de la pc. después de haber corrido el programa, el tasklist no se refresca.

para refrescarlo ahí que volver a correr el programa para que este se refresque y el tasklist vuelva a capturar los procesos que ahí en la pc. y muestre los procesos que se están llevando acabo y descarte o tome en cuenta los procesos que se han cerrado o abierto y vuelva a mostrar la lista de procesos actualizada con los procesos descartados o con los procesos nuevos.

valla noooo XD que cosas XD

en este programa miro que el tasklist se esta actualizando solo asi que no es necesario estar refrescando el programa para que el tasklist muestre los procesos que se están abriendo o cerrando.

gracias por tu aporte OscarRyz saludosssss ¡ ¡¡ ¡ ¡¡¡ ¡¡ ¡

Para repetir algo en Java

Para repetir algo en Java basta que lo pongas en un loop:

while ( true ) {
    System.out.println("Algo");
}

Lo mismo aplica para llamar a tasklist

while ( true ) {
   ProcessBuilder.command("TASKLIST", "ETCETC").start();
}

Es por eso que no encontraste ejemplos que lo muestres, porque es un tanto obvio, sin embargo, un loop asi tiene el inconveniente que lo ejecutaría demasiadas veces, para llamar una tarea a intervalos se puede usar Timer

        Timer timer   = new Timer();
        timer.schedule( funcionalidadAqui, 0, 500);

muy buen ejemplo

gracias por el ejemplo también es una buena manera XD de estarlo repitiendo gracia por el aporte saludosss XD

con este ejemplo quisiera ejecutar tasklist con la tecla enter

hola tengo el siguiente ejemplo lo que hace es que te muestra los procesos en consola del tasklist, pero lo que no puedo hacer es que el tasklist se ejecute cada vez que aplasto la tecla enter (esta es la menera como quiero refrescar el tasklist), trate de adaptarlo a los ejemplos visto en este tema del foro pero no pude lograrlo, quiero ver si me pueden dar un apoyo saludos XD

public static void main(String[] args) {

try {
String line;
Process p = Runtime.getRuntime().exec(System.getenv("windir") +"\\system32\\"+"tasklist.exe");;
BufferedReader input =
new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null) {
System.out.println(line); //<-- Parse data here.
}
input.close();
} catch (Exception err) {
err.printStackTrace();
}

}

}