java - than - vuejs typescript tutorial




Wie bekomme ich eine Liste der aktuellen offenen Fenster/Prozesse mit Java? (7)

Weiß jemand, wie bekomme ich das aktuelle offene Fenster oder den Prozess eines lokalen Rechners mit Java?

Was ich versuche, ist: Liste der aktuellen offenen Task, Windows oder Prozess öffnen, wie im Windows Taskmanager, aber mit einer Multi-Plattform-Ansatz - mit nur Java, wenn es möglich ist.


Der einzige Weg, den ich mir vorstellen kann, ist, eine Befehlszeilenanwendung aufzurufen, die die Aufgabe für Sie erledigt und dann die Ausgabe scrollt (wie die Tasks ps und Windows von Linux).

Unglücklicherweise bedeutet das, dass Sie einige Parsing-Routinen schreiben müssen, um die Daten von beiden zu lesen.

Process proc = Runtime.getRuntime().exec ("tasklist.exe");
InputStream procOutput = proc.getInputStream ();
if (0 == proc.waitFor ()) {
    // TODO scan the procOutput for your data
}

Die Verwendung von Code zum Parsen von ps aux für Linux und tasklist für Windows sind die besten Optionen, bis etwas allgemeineres kommt.

Für Windows können Sie verweisen: http://www.rgagnon.com/javadetails/java-0593.html

Linux kann die Ergebnisse von ps aux über grep pipen, was die Verarbeitung / Suche schnell und einfach macht. Ich bin sicher, dass Sie auch für Windows etwas Ähnliches finden können.


Es gibt keine plattformneutrale Möglichkeit, dies zu tun. In der Version 1.6 von Java wurde eine " Desktop " -Klasse hinzugefügt, die portable Möglichkeiten zum Durchsuchen, Bearbeiten, Versenden, Öffnen und Drucken von URIs ermöglicht. Es ist möglich, dass diese Klasse eines Tages erweitert werden kann, um Prozesse zu unterstützen, aber ich bezweifle es.

Wenn Sie nur an Java-Prozessen java.lang.management sind, können Sie die java.lang.management API zum java.lang.management Thread- / Speicherinformationen auf der JVM verwenden.


Für Windows verwende ich folgendes:

        Process process = new ProcessBuilder("tasklist.exe", "/fo", "csv", "/nh").start();
    new Thread(() -> {
        Scanner sc = new Scanner(process.getInputStream());
        if (sc.hasNextLine()) sc.nextLine();
        while (sc.hasNextLine()) {
            String line = sc.nextLine();
            String[] parts = line.split(",");
            String unq = parts[0].substring(1).replaceFirst(".$", "");
            String pid = parts[1].substring(1).replaceFirst(".$", "");
            System.out.println(unq + " " + pid);
        }
    }).start();
    process.waitFor();
    System.out.println("Done");

Sie können die Liste der laufenden Prozesse jProcesses mit jProcesses

List<ProcessInfo> processesList = JProcesses.getProcessList();

for (final ProcessInfo processInfo : processesList) {
    System.out.println("Process PID: " + processInfo.getPid());
    System.out.println("Process Name: " + processInfo.getName());
    System.out.println("Process Used Time: " + processInfo.getTime());
    System.out.println("Full command: " + processInfo.getCommand());
    System.out.println("------------------");
}

Unter Windows gibt es eine Alternative mit JNA :

import com.sun.jna.Native;
import com.sun.jna.platform.win32.*;
import com.sun.jna.win32.W32APIOptions;

public class ProcessList {

    public static void main(String[] args) {
        WinNT winNT = (WinNT) Native.loadLibrary(WinNT.class, W32APIOptions.UNICODE_OPTIONS);

        WinNT.HANDLE snapshot = winNT.CreateToolhelp32Snapshot(Tlhelp32.TH32CS_SNAPPROCESS, new WinDef.DWORD(0));

        Tlhelp32.PROCESSENTRY32.ByReference processEntry = new Tlhelp32.PROCESSENTRY32.ByReference();

        while (winNT.Process32Next(snapshot, processEntry)) {
            System.out.println(processEntry.th32ProcessID + "\t" + Native.toString(processEntry.szExeFile));
        }

        winNT.CloseHandle(snapshot);
    }
}

package com.vipul;

import java.applet.Applet;
import java.awt.Checkbox;
import java.awt.Choice;
import java.awt.Font;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class BatchExecuteService extends Applet {
    public Choice choice;

    public void init() 
    {
        setFont(new Font("Helvetica", Font.BOLD, 36));
        choice = new Choice();
    }

    public static void main(String[] args) {
        BatchExecuteService batchExecuteService = new BatchExecuteService();
        batchExecuteService.run();
    }

    List<String> processList = new ArrayList<String>();

    public void run() {
        try {
            Runtime runtime = Runtime.getRuntime();
            Process process = runtime.exec("D:\\server.bat");
            process.getOutputStream().close();
            InputStream inputStream = process.getInputStream();
            InputStreamReader inputstreamreader = new InputStreamReader(
                    inputStream);
            BufferedReader bufferedrReader = new BufferedReader(
                    inputstreamreader);
            BufferedReader bufferedrReader1 = new BufferedReader(
                    inputstreamreader);

            String strLine = "";
            String x[]=new String[100];
            int i=0;
            int t=0;
            while ((strLine = bufferedrReader.readLine()) != null) 
            {
        //      System.out.println(strLine);
                String[] a=strLine.split(",");
                x[i++]=a[0];
            }
    //      System.out.println("Length : "+i);

            for(int j=2;j<i;j++)
            {
                System.out.println(x[j]);
            }
        }
        catch (IOException ioException) 
        {
            ioException.printStackTrace();
        }

    }
}
   You can create batch file like 

TASKLISTE / v / FI "STATUS Lauf" / FO "CSV" / FI "Benutzername eq LHPL002 \ soft" / FI "MEMUSAGE gt 10000" / FI "Fenstertitel ne N / A" / NH





process