java - 列出所有进程?

标签 java windows process jna

如何使用 JNA 4.5.0 获取 Java 中所有正在运行的进程的列表?

我已经尝试过这段代码:

WinNT winNT = (WinNT) Native.loadLibrary(WinNT.class, W32APIOptions.UNICODE_OPTIONS);
winNT.HANDLE snapshot = winNT.CreateToolhelp32Snapshot(Tlhelp32.TH32CS_SNAPPROCESS, new WinDef.DWORD(0));
Thelp32.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);

但它不起作用,因为它是为旧版本的 JNA 库编写的。

最佳答案

Kernel32 类中存在您现在正在寻找的一些功能。通过一些小的更正,您的代码片段可以正常工作:

import com.sun.jna.Native;
import com.sun.jna.platform.win32.Kernel32;
import com.sun.jna.platform.win32.Tlhelp32;
import com.sun.jna.platform.win32.WinDef;
import com.sun.jna.platform.win32.WinNT;

public class Main {
    public static void main(String[] args) {
        Kernel32 kernel = Kernel32.INSTANCE;

        WinNT.HANDLE snapshot = kernel.CreateToolhelp32Snapshot(Tlhelp32.TH32CS_SNAPPROCESS, new WinDef.DWORD(0));
        Tlhelp32.PROCESSENTRY32.ByReference processEntry = new Tlhelp32.PROCESSENTRY32.ByReference();

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

关于java - 列出所有进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46917354/

相关文章:

c# - 如何将输入从一个声卡重定向到另一个?

python - 如何使用python获取进程的pid

c# - 进程包装,一些输出不显示

java - 在 Lucee 上安装 Cassandra Java 驱动程序

java - Mapstruct:如何将两个字段合并为一个

c# - 在 C# .NET 中为蓝牙创建虚拟 COM 端口

c++ - BITMAPINFO 结构的 bmiColors 字段

c# - 是否可以确定进程运行了多长时间

java - 无法在 Java 线程内创建 for 循环 - 为什么?

java - 日期时间格式具有尾随零并捕捉到毫、微米或纳米格式