Originariamente inviato da Aramil89
Vi aggiorno sul problema:
Ho utilizzato JUnique e mi sembra funzionare correttamente quindi la tengo come ultima soluzione, però mi è stato chiesto di fare il possibile per lavorare con i processi di windows.
Qualche suggerimento? ho trovato un metodo che esegue un exec("tasklist") ma il maledetto win2000 non ha il tasklist e quindi è andato in fumo..
sono alla disperata ricerca di qualche altro modo ma non riesco a trovare nulla che cooperi con i processi di windows senza utilizzare il comando tasklist...
Googlando un po ho trovato un esempio che non utilizza il tasklist, ma crea un VBScript on-the-fly che ritorna la lista dei processi attivi, mi sembra un ottima soluzione al tuo caso visto che sei fissato sui processi, eccolo qua:
codice:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.util.*;
public class VBSUtils {
private VBSUtils() { }
public static List<String> listRunningProcesses() {
List<String> processList = new ArrayList<String>();
try {
File file = File.createTempFile("realhowto",".vbs");
file.deleteOnExit();
FileWriter fw = new java.io.FileWriter(file);
String vbs = "Set WshShell = WScript.CreateObject(\"WScript.Shell\")\n"
+ "Set locator = CreateObject(\"WbemScripting.SWbemLocator\")\n"
+ "Set service = locator.ConnectServer()\n"
+ "Set processes = service.ExecQuery _\n"
+ " (\"select name from Win32_Process\")\n"
+ "For Each process in processes\n"
+ "wscript.echo process.Name \n"
+ "Next\n"
+ "Set WSHShell = Nothing\n";
fw.write(vbs);
fw.close();
Process p = Runtime.getRuntime().exec("cscript //NoLogo " + file.getPath());
BufferedReader input =
new BufferedReader
(new InputStreamReader(p.getInputStream()));
String line;
while ((line = input.readLine()) != null) {
processList.add(line);
}
input.close();
}
catch(Exception e){
e.printStackTrace();
}
return processList;
}
public static void main(String[] args){
List<String> processes = VBSUtils.listRunningProcesses();
String result = "";
Iterator<String> it = processes.iterator();
int i = 0;
while (it.hasNext()) {
result += it.next() +",";
i++;
if (i==10) {
result += "\n";
i = 0;
}
}
msgBox("Running processes : " + result);
}
public static void msgBox(String msg) {
javax.swing.JOptionPane.showConfirmDialog((java.awt.Component)
null, msg, "VBSUtils", javax.swing.JOptionPane.DEFAULT_OPTION);
}
}