Tratando de obtener el serial de un USB evitando utilizar la api de windows, en java, googleando encontre un ejm acceder a registros de windows desde java (http://chuwiki.chuidiang.org/index.php?title=Acceder_a_registro_de_Windows_desde_Java). Modifique y resultó esto, el problema es que los registros no se actualizan cuando quitas un USB :o bueno quizá alguien tenga alguna sugerencia.
import java.io.*;
public class RegQuery {
private static final String REGQUERY_UTIL = "reg query ";
private static final String REGSTR_TOKEN = "REG_SZ";
private static final String REGDWORD_TOKEN = "REG_DWORD";
private static final String SERIAL_USB = REGQUERY_UTIL +
"HKLM\\SYSTEM\\CurrentControlSet\\Control\\DeviceClasses\\{a5dcbf10-6530-11d2-901f-00c04fb951ed}\\";
//+ " /v DeviceInstance";
public static String getSERIALS_USB() {
try {
Process process = Runtime.getRuntime().exec(SERIAL_USB);
StreamReader reader = new StreamReader(process.getInputStream());
String ret, cad[], su[];
int p = -1;
reader.start();
process.waitFor();
reader.join();
String result = reader.getResult();
cad = result.split("\n");
ret = "";
for(int i=0; i < cad.length; i++) {
p = cad[i].indexOf("USB");
if (p != -1 ) {
cad[i] = cad[i].substring(p);
su = cad[i].split("#");
ret += su[2]+"\n";
}
}
return ret;
}
catch (Exception e) {
return null;
}
}
static class StreamReader extends Thread {
private InputStream is;
private StringWriter sw;
StreamReader(InputStream is) {
this.is = is;
sw = new StringWriter();
}
public void run() {
try {
int c;
while ((c = is.read()) != -1)
sw.write(c);
}
catch (IOException e) { ; }
}
String getResult() {
return sw.toString();
}
}
public static void main(String s[]) {
System.out.println("Seriales :\n" + getSERIALS_USB());
}
}
Saludos.