Buongiorno a tutti, ringrazio in anticipo chi puo' darmi una mano oppure un consiglio.
mi serve sapere lo stato di una stampante, quindi disponibile,attivo,acceso,spento (dovrebbe essere un intero, su cui poi avere uno switch per dare lo stato in output da inserire in un json) per poi eventualmente stampare.grazie
1)questo blocco mi stampa tutti i nomi delle stampanti disponibili, sono info utili ma non è quello che mi serve
PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
for (int i = 0; i < services.length; i++) {
System.out.println(services.getName());
}
2)con questo blocco posso fare una ricerca in base al nome delle stampanti e ho queste info, ma non sono quelle che mi servono
color-supported: not-supported
printer-is-accepting-jobs: accepting-jobs
printer-name: NOME STAMPANTE
queued-job-count: 0
for (int i = 0; i < services.length; i++) {
if(services.getName().equals("NOME STAMPANTE")) {
att = services.getAttributes();
for (Attribute a : att.toArray()) {
System.out.println(a.getName() + ": " + att.get(a.getClass()).toString();
}
3)quest'ultimo blocco mi stampa printer state 0 e printer status 3, ma in caso di stampante off o disconnessione dalla lan l'output resta sempre printerstate 0 e printerstatus 3, mentre in realta' dovrebbe cambiare.
ProcessBuilder builder = new ProcessBuilder("powershell.exe", "get-wmiobject -class win32_printer | Select-Object Name, PrinterState, PrinterStatus | where {$_.Name -eq '"+services.getName()+"'}");
String fullStatus = null;
Process reg;
builder.redirectErrorStream(true);
try {
reg = builder.start();
InputStream inputStream = reg.getInputStream();
//conversione da input stream a stringa, con un metodo definito all'esterno
fullStatus = getStringFromInputStream(reg.getInputStream());
reg.destroy();
} catch (IOException e1) {
e1.printStackTrace();