首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用Java获取当前打开的窗口/进程的列表?

如何使用Java获取当前打开的窗口/进程的列表?
EN

Stack Overflow用户
提问于 2008-09-10 16:56:43
回答 11查看 193.4K关注 0票数 102

有人知道如何使用Java获取当前打开的窗口或本地计算机的进程吗?

我想做的是:列出当前打开的任务,窗口或进程打开,就像在windows Taskmanager中一样,但要使用多平台的方法-如果可能的话,只使用Java。

EN

回答 11

Stack Overflow用户

发布于 2017-07-13 05:46:34

最后,使用Java 9+,使用ProcessHandle也是可能的

代码语言:javascript
复制
public static void main(String[] args) {
    ProcessHandle.allProcesses()
            .forEach(process -> System.out.println(processDetails(process)));
}

private static String processDetails(ProcessHandle process) {
    return String.format("%8d %8s %10s %26s %-40s",
            process.pid(),
            text(process.parent().map(ProcessHandle::pid)),
            text(process.info().user()),
            text(process.info().startInstant()),
            text(process.info().commandLine()));
}

private static String text(Optional<?> optional) {
    return optional.map(Object::toString).orElse("-");
}

输出:

代码语言:javascript
复制
    1        -       root   2017-11-19T18:01:13.100Z /sbin/init
  ...
  639     1325   www-data   2018-12-04T06:35:58.680Z /usr/sbin/apache2 -k start
  ...
23082    11054    huguesm   2018-12-04T10:24:22.100Z /.../java ProcessListDemo
票数 45
EN

Stack Overflow用户

发布于 2012-02-27 17:53:35

在Windows上,还有一种使用JNA的替代方法

代码语言:javascript
复制
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);
    }
}
票数 25
EN

Stack Overflow用户

发布于 2008-09-10 17:00:32

我能想到的唯一办法就是调用一个命令行应用程序来帮你完成这项工作,然后截取输出(就像Linux的ps和Window的任务列表一样)。

不幸的是,这意味着您必须编写一些解析例程来从两者读取数据。

代码语言:javascript
复制
Process proc = Runtime.getRuntime().exec ("tasklist.exe");
InputStream procOutput = proc.getInputStream ();
if (0 == proc.waitFor ()) {
    // TODO scan the procOutput for your data
}
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档