2017-10-24 5 views
2

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のLIBの古いバージョンのために書かれているので、それが機能していません。

答えて

0

現在探している機能の一部は、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); 
    } 
} 
関連する問題