## 获取当前系统所有正在运行的进程 ProcList类 ```java package com.wonder.utils; import java.util.*; 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; import com.sun.jna.win32.W32APIOptions; public class ProcList{ //data members private String dwSize; private String cntUsage; private String th32ProcessID; private String th32DefaultHeapID; private String th32ModuleID; private String cntThreads; private String th32ParentProcessID; private String pcPriClassBase; private String dwFlags; private String szExeFile; private String procPath; private List procData = new ArrayList();; //getting proc details (without path) public List getProcList(){ Kernel32 kernel32 = (Kernel32) Native.loadLibrary(Kernel32.class, W32APIOptions.DEFAULT_OPTIONS); Tlhelp32.PROCESSENTRY32.ByReference processEntry = new Tlhelp32.PROCESSENTRY32.ByReference(); WinNT.HANDLE processSnapshot = kernel32.CreateToolhelp32Snapshot(Tlhelp32.TH32CS_SNAPPROCESS, new WinDef.DWORD(0)); try { //looping ProcList while (kernel32.Process32Next(processSnapshot, processEntry)){ //assigning details dwSize = processEntry.dwSize.toString(); cntUsage = processEntry.cntUsage.toString(); th32ProcessID = processEntry.th32ProcessID.toString(); th32DefaultHeapID = processEntry.th32DefaultHeapID.toString(); th32ModuleID = processEntry.th32ModuleID.toString(); cntThreads = processEntry.cntThreads.toString(); th32ParentProcessID = processEntry.th32ParentProcessID.toString(); pcPriClassBase = processEntry.pcPriClassBase.toString(); dwFlags = processEntry.dwFlags.toString(); szExeFile = Native.toString(processEntry.szExeFile); //final 2d result array procData.add(new String[] {dwSize, cntUsage, th32ProcessID, th32DefaultHeapID, th32ModuleID, cntThreads, th32ParentProcessID, pcPriClassBase, pcPriClassBase, dwFlags, szExeFile}); } } finally { kernel32.CloseHandle(processSnapshot); } //returning data return procData; } //getting proc details (with path) public List getProcListExt(){ Kernel32 kernel32 = (Kernel32) Native.loadLibrary(Kernel32.class, W32APIOptions.DEFAULT_OPTIONS); Tlhelp32.PROCESSENTRY32.ByReference processEntry = new Tlhelp32.PROCESSENTRY32.ByReference(); WinNT.HANDLE processSnapshot = kernel32.CreateToolhelp32Snapshot(Tlhelp32.TH32CS_SNAPPROCESS, new WinDef.DWORD(0)); try { //looping ProcList while (kernel32.Process32Next(processSnapshot, processEntry)){ //assigning details dwSize = processEntry.dwSize.toString(); cntUsage = processEntry.cntUsage.toString(); th32ProcessID = processEntry.th32ProcessID.toString(); th32DefaultHeapID = processEntry.th32DefaultHeapID.toString(); th32ModuleID = processEntry.th32ModuleID.toString(); cntThreads = processEntry.cntThreads.toString(); th32ParentProcessID = processEntry.th32ParentProcessID.toString(); pcPriClassBase = processEntry.pcPriClassBase.toString(); dwFlags = processEntry.dwFlags.toString(); szExeFile = Native.toString(processEntry.szExeFile); //getting path WinNT.HANDLE moduleSnapshot = kernel32.CreateToolhelp32Snapshot(Tlhelp32.TH32CS_SNAPMODULE, processEntry.th32ProcessID); ProcessPathKernel32.MODULEENTRY32.ByReference me = new ProcessPathKernel32.MODULEENTRY32.ByReference(); ProcessPathKernel32.INSTANCE.Module32First(moduleSnapshot, me); procPath = me.szExePath(); //final 2d result array procData.add(new String[] {dwSize, cntUsage, th32ProcessID, th32DefaultHeapID, th32ModuleID, cntThreads, th32ParentProcessID, pcPriClassBase, pcPriClassBase, dwFlags, szExeFile, procPath}); } } finally { kernel32.CloseHandle(processSnapshot); } //returning data return procData; } public String PidAndName() { List test = new ArrayList(); Map coursesMap =new HashMap(); ProcList pl = new ProcList(); test = pl.getProcListExt(); String sjson=""; for (int i = 0; i < test.size(); i++) { //System.out.println(Arrays.toString(test.get(i))); //System.out.println(test.get(i)[2]+"---"+test.get(i)[10]); // coursesMap.put("PID",test.get(i)[2]); // coursesMap.put("processName",test.get(i)[10]); // System.out.println("PID" + ":" + test.get(i)[2]); // System.out.println("processName" + ":" + test.get(i)[10]); sjson=sjson+"{"+"\"PID\"" + ":" +"\""+ test.get(i)[2] +"\""+","+"\"processName\"" + ":" +"\""+ test.get(i)[10]+"\""+"},"; } sjson ="["+sjson.substring(0,sjson.length() - 1)+"]"; return sjson; // for (int i = 0; i < test.size(); i++) { // //System.out.println(Arrays.toString(test.get(i))); // //System.out.println(test.get(i)[2]+"---"+test.get(i)[10]); // coursesMap.put(test.get(i)[2], test.get(i)[10]); // } // return coursesMap; } public static void main(String[] args) { List test = new ArrayList(); ProcList pl = new ProcList(); test = pl.getProcListExt(); // for (String[] row : test) { // System.out.println(row[0]+"\t"+row[9]+"\t\t"+row[10]); // } // for (String[] strings : test) { // System.out.println("pid: "+strings[2]+"---"+"name: "+strings[10]); // } Map coursesMap =new HashMap(); // for (String[] strings : test) { // System.out.println("pid: "+strings[2]+"---"+"name: "+strings[10]); // } System.out.println(test.size()); String sjson=""; for (int i = 0; i < test.size(); i++) { //System.out.println(Arrays.toString(test.get(i))); //System.out.println(test.get(i)[2]+"---"+test.get(i)[10]); // coursesMap.put("PID",test.get(i)[2]); // coursesMap.put("processName",test.get(i)[10]); // System.out.println("PID" + ":" + test.get(i)[2]); // System.out.println("processName" + ":" + test.get(i)[10]); sjson=sjson+"{"+"\"PID\"" + ":" + "\"test.get(i)[2]\""+","+"\"processName\"" + ":" + "\"test.get(i)[10]\""+"},"; } sjson =sjson.substring(0,sjson.length() - 1); System.out.println(sjson); // coursesMap.entrySet().stream().forEach((entry) -> { // System.out.println(entry.getKey()+"---"+entry.getValue()); // }); } } ``` ProcessPathKernel32接口 ```java package com.wonder.utils; import java.util.Arrays; import java.util.List; import com.sun.jna.Native; import com.sun.jna.Pointer; import com.sun.jna.Structure; import com.sun.jna.platform.win32.Kernel32; import com.sun.jna.platform.win32.WinDef; import com.sun.jna.win32.W32APIOptions; public interface ProcessPathKernel32 extends Kernel32 { class MODULEENTRY32 extends Structure { public static class ByReference extends MODULEENTRY32 implements Structure.ByReference { public ByReference() { } public ByReference(Pointer memory) { super(memory); } } public MODULEENTRY32() { dwSize = new WinDef.DWORD(size()); } public MODULEENTRY32(Pointer memory) { super(memory); read(); } public DWORD dwSize; public DWORD th32ModuleID; public DWORD th32ProcessID; public DWORD GlblcntUsage; public DWORD ProccntUsage; public Pointer modBaseAddr; public DWORD modBaseSize; public HMODULE hModule; public char[] szModule = new char[255+1]; // MAX_MODULE_NAME32 public char[] szExePath = new char[MAX_PATH]; public String szModule() { return Native.toString(this.szModule); } public String szExePath() { return Native.toString(this.szExePath); } @Override protected List getFieldOrder() { return Arrays.asList(new String[] { "dwSize", "th32ModuleID", "th32ProcessID", "GlblcntUsage", "ProccntUsage", "modBaseAddr", "modBaseSize", "hModule", "szModule", "szExePath" }); } } ProcessPathKernel32 INSTANCE = (ProcessPathKernel32)Native.loadLibrary(ProcessPathKernel32.class, W32APIOptions.UNICODE_OPTIONS); boolean Module32First(HANDLE hSnapshot, MODULEENTRY32.ByReference lpme); boolean Module32Next(HANDLE hSnapshot, MODULEENTRY32.ByReference lpme); } ``` Loading... ## 获取当前系统所有正在运行的进程 ProcList类 ```java package com.wonder.utils; import java.util.*; 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; import com.sun.jna.win32.W32APIOptions; public class ProcList{ //data members private String dwSize; private String cntUsage; private String th32ProcessID; private String th32DefaultHeapID; private String th32ModuleID; private String cntThreads; private String th32ParentProcessID; private String pcPriClassBase; private String dwFlags; private String szExeFile; private String procPath; private List<String[]> procData = new ArrayList<String[]>();; //getting proc details (without path) public List<String[]> getProcList(){ Kernel32 kernel32 = (Kernel32) Native.loadLibrary(Kernel32.class, W32APIOptions.DEFAULT_OPTIONS); Tlhelp32.PROCESSENTRY32.ByReference processEntry = new Tlhelp32.PROCESSENTRY32.ByReference(); WinNT.HANDLE processSnapshot = kernel32.CreateToolhelp32Snapshot(Tlhelp32.TH32CS_SNAPPROCESS, new WinDef.DWORD(0)); try { //looping ProcList while (kernel32.Process32Next(processSnapshot, processEntry)){ //assigning details dwSize = processEntry.dwSize.toString(); cntUsage = processEntry.cntUsage.toString(); th32ProcessID = processEntry.th32ProcessID.toString(); th32DefaultHeapID = processEntry.th32DefaultHeapID.toString(); th32ModuleID = processEntry.th32ModuleID.toString(); cntThreads = processEntry.cntThreads.toString(); th32ParentProcessID = processEntry.th32ParentProcessID.toString(); pcPriClassBase = processEntry.pcPriClassBase.toString(); dwFlags = processEntry.dwFlags.toString(); szExeFile = Native.toString(processEntry.szExeFile); //final 2d result array procData.add(new String[] {dwSize, cntUsage, th32ProcessID, th32DefaultHeapID, th32ModuleID, cntThreads, th32ParentProcessID, pcPriClassBase, pcPriClassBase, dwFlags, szExeFile}); } } finally { kernel32.CloseHandle(processSnapshot); } //returning data return procData; } //getting proc details (with path) public List<String[]> getProcListExt(){ Kernel32 kernel32 = (Kernel32) Native.loadLibrary(Kernel32.class, W32APIOptions.DEFAULT_OPTIONS); Tlhelp32.PROCESSENTRY32.ByReference processEntry = new Tlhelp32.PROCESSENTRY32.ByReference(); WinNT.HANDLE processSnapshot = kernel32.CreateToolhelp32Snapshot(Tlhelp32.TH32CS_SNAPPROCESS, new WinDef.DWORD(0)); try { //looping ProcList while (kernel32.Process32Next(processSnapshot, processEntry)){ //assigning details dwSize = processEntry.dwSize.toString(); cntUsage = processEntry.cntUsage.toString(); th32ProcessID = processEntry.th32ProcessID.toString(); th32DefaultHeapID = processEntry.th32DefaultHeapID.toString(); th32ModuleID = processEntry.th32ModuleID.toString(); cntThreads = processEntry.cntThreads.toString(); th32ParentProcessID = processEntry.th32ParentProcessID.toString(); pcPriClassBase = processEntry.pcPriClassBase.toString(); dwFlags = processEntry.dwFlags.toString(); szExeFile = Native.toString(processEntry.szExeFile); //getting path WinNT.HANDLE moduleSnapshot = kernel32.CreateToolhelp32Snapshot(Tlhelp32.TH32CS_SNAPMODULE, processEntry.th32ProcessID); ProcessPathKernel32.MODULEENTRY32.ByReference me = new ProcessPathKernel32.MODULEENTRY32.ByReference(); ProcessPathKernel32.INSTANCE.Module32First(moduleSnapshot, me); procPath = me.szExePath(); //final 2d result array procData.add(new String[] {dwSize, cntUsage, th32ProcessID, th32DefaultHeapID, th32ModuleID, cntThreads, th32ParentProcessID, pcPriClassBase, pcPriClassBase, dwFlags, szExeFile, procPath}); } } finally { kernel32.CloseHandle(processSnapshot); } //returning data return procData; } public String PidAndName() { List<String[]> test = new ArrayList<String[]>(); Map<String, String> coursesMap =new HashMap<String, String>(); ProcList pl = new ProcList(); test = pl.getProcListExt(); String sjson=""; for (int i = 0; i < test.size(); i++) { //System.out.println(Arrays.toString(test.get(i))); //System.out.println(test.get(i)[2]+"---"+test.get(i)[10]); // coursesMap.put("PID",test.get(i)[2]); // coursesMap.put("processName",test.get(i)[10]); // System.out.println("PID" + ":" + test.get(i)[2]); // System.out.println("processName" + ":" + test.get(i)[10]); sjson=sjson+"{"+"\"PID\"" + ":" +"\""+ test.get(i)[2] +"\""+","+"\"processName\"" + ":" +"\""+ test.get(i)[10]+"\""+"},"; } sjson ="["+sjson.substring(0,sjson.length() - 1)+"]"; return sjson; // for (int i = 0; i < test.size(); i++) { // //System.out.println(Arrays.toString(test.get(i))); // //System.out.println(test.get(i)[2]+"---"+test.get(i)[10]); // coursesMap.put(test.get(i)[2], test.get(i)[10]); // } // return coursesMap; } public static void main(String[] args) { List<String[]> test = new ArrayList<String[]>(); ProcList pl = new ProcList(); test = pl.getProcListExt(); // for (String[] row : test) { // System.out.println(row[0]+"\t"+row[9]+"\t\t"+row[10]); // } // for (String[] strings : test) { // System.out.println("pid: "+strings[2]+"---"+"name: "+strings[10]); // } Map<String, String> coursesMap =new HashMap<String, String>(); // for (String[] strings : test) { // System.out.println("pid: "+strings[2]+"---"+"name: "+strings[10]); // } System.out.println(test.size()); String sjson=""; for (int i = 0; i < test.size(); i++) { //System.out.println(Arrays.toString(test.get(i))); //System.out.println(test.get(i)[2]+"---"+test.get(i)[10]); // coursesMap.put("PID",test.get(i)[2]); // coursesMap.put("processName",test.get(i)[10]); // System.out.println("PID" + ":" + test.get(i)[2]); // System.out.println("processName" + ":" + test.get(i)[10]); sjson=sjson+"{"+"\"PID\"" + ":" + "\"test.get(i)[2]\""+","+"\"processName\"" + ":" + "\"test.get(i)[10]\""+"},"; } sjson =sjson.substring(0,sjson.length() - 1); System.out.println(sjson); // coursesMap.entrySet().stream().forEach((entry) -> { // System.out.println(entry.getKey()+"---"+entry.getValue()); // }); } } ``` ProcessPathKernel32接口 ```java package com.wonder.utils; import java.util.Arrays; import java.util.List; import com.sun.jna.Native; import com.sun.jna.Pointer; import com.sun.jna.Structure; import com.sun.jna.platform.win32.Kernel32; import com.sun.jna.platform.win32.WinDef; import com.sun.jna.win32.W32APIOptions; public interface ProcessPathKernel32 extends Kernel32 { class MODULEENTRY32 extends Structure { public static class ByReference extends MODULEENTRY32 implements Structure.ByReference { public ByReference() { } public ByReference(Pointer memory) { super(memory); } } public MODULEENTRY32() { dwSize = new WinDef.DWORD(size()); } public MODULEENTRY32(Pointer memory) { super(memory); read(); } public DWORD dwSize; public DWORD th32ModuleID; public DWORD th32ProcessID; public DWORD GlblcntUsage; public DWORD ProccntUsage; public Pointer modBaseAddr; public DWORD modBaseSize; public HMODULE hModule; public char[] szModule = new char[255+1]; // MAX_MODULE_NAME32 public char[] szExePath = new char[MAX_PATH]; public String szModule() { return Native.toString(this.szModule); } public String szExePath() { return Native.toString(this.szExePath); } @Override protected List<String> getFieldOrder() { return Arrays.asList(new String[] { "dwSize", "th32ModuleID", "th32ProcessID", "GlblcntUsage", "ProccntUsage", "modBaseAddr", "modBaseSize", "hModule", "szModule", "szExePath" }); } } ProcessPathKernel32 INSTANCE = (ProcessPathKernel32)Native.loadLibrary(ProcessPathKernel32.class, W32APIOptions.UNICODE_OPTIONS); boolean Module32First(HANDLE hSnapshot, MODULEENTRY32.ByReference lpme); boolean Module32Next(HANDLE hSnapshot, MODULEENTRY32.ByReference lpme); } ``` 最后修改:2025 年 04 月 13 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏