Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Java从本机windowHandle获取进程信息?_Java_Process_Native - Fatal编程技术网

如何使用Java从本机windowHandle获取进程信息?

如何使用Java从本机windowHandle获取进程信息?,java,process,native,Java,Process,Native,我有窗户的把手。我需要获得有关进程的其他信息,如CPU%,内存名等 我怎样才能得到它?正在考虑使用。从下载jna.jar和platform.jar 您可能已经注意到,我们可以使用user32.dll从窗口句柄获取pid。然后我们可以在kernel32.dll中使用来获取指向该进程的指针。然后,like和inpsapi.dll可以帮助您从该进程对象获取进程信息,而inkernel32.dll可以返回cpu使用情况。GetProcessMemoryInfo包含一个名为的需要处理的结构 static

我有窗户的把手。我需要获得有关进程的其他信息,如CPU%,内存名等

我怎样才能得到它?

正在考虑使用。从下载jna.jar和platform.jar

您可能已经注意到,我们可以使用user32.dll从窗口句柄获取pid。然后我们可以在kernel32.dll中使用来获取指向该进程的指针。然后,like和inpsapi.dll可以帮助您从该进程对象获取进程信息,而inkernel32.dll可以返回cpu使用情况。
GetProcessMemoryInfo
包含一个名为的需要处理的结构

static class Kernel32 {
    static { Native.register("kernel32"); }
    public static int PROCESS_QUERY_INFORMATION = 0x0400;
    public static int PROCESS_VM_READ = 0x0010;
    public static native int GetLastError();
    public static native Pointer OpenProcess(int dwDesiredAccess, boolean bInheritHandle, Pointer pointer);
    public static native boolean GetProcessTimes(Pointer hProcess, int lpCreationTime,int LPFILETIME lpExitTime, int lpKernelTime, int lpUserTime
}

static class Psapi {
    static { Native.register("psapi"); }
    public static native int GetModuleBaseNameW(Pointer hProcess, Pointer hmodule, char[] lpBaseName, int size);
    ...
}

static class User32DLL {
    static { Native.register("user32"); }
    public static native int GetWindowThreadProcessId(HWND hWnd, PointerByReference pref);
    public static native int GetWindowTextW(HWND hWnd, char[] lpString, int nMaxCount);
}

PointerByReference pointer = new PointerByReference();
GetWindowThreadProcessId(yourHandle, pointer);
Pointer process = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, false, pointer.getValue());
GetModuleBaseNameW(process, null, buffer, MAX_TITLE_LENGTH);
System.out.println("Active window process: " + Native.toString(buffer));

我只是想说,经过2个小时的搜索,这是唯一一个对我有效的答案,因为我能够一次性列出标题和流程!非常感谢。