2011-11-17 6 views
7

Voglio rilevare se una stampante è online/offline PRIMA si tenta di stampare. Se è offline, la finestra di dialogo di stampa non sarà visibile.Come rilevare se una stampante USB collegata è accesa o spenta?

"OpenPrinter" di Win32 API ecc sembrano funzionare sulla coda spooler, piuttosto che stampante stessa, e sarà solo segnalare la stampante offline DOPO un documento viene inviato, cheè troppo tardi.

DOMANDA: Come posso sapere se una stampante è offline/online senza inviare una stampa?

EDIT:

Offline - printer is turned off 
OnLine - printer is turned On 
+0

Che cosa significa online/offline ai fini di questa domanda? Non in linea significa disconnesso, o c'è qualche altra condizione che potresti voler prendere in questo modo? – 0xC0000022L

risposta

0

Non credo che questo sia possibile.

Come già scoperto questo è astratto utilizzando lo spooler e lo stato di spooler non riflette sempre lo stato della stampante.

Quindi questo è di progettazione in Windows.

Se si dispone di un solo tipo di stampante specifica si potrebbe interrogare se è collegato a USB.

+0

http://stackoverflow.com/questions/4838033/getting-the-port-name-of-a-connected-usb-device –

+0

In realtà è possibile interrogare questo anche con più stampanti collegate. – 0xC0000022L

+0

Certo, volevo dire se il programma deve interrogare più tipi di stampante su sistemi diversi potrebbe diventare più complicato. –

4

Presumibilmente si conosce il nome della stampante o altri dettagli su di esso.

Bene, allora è sufficiente utilizzare EnumPrinters con PRINTER_INFO_2 e controllare PRINTER_STATUS_OFFLINE (o qualsiasi altro stato che si desidera evitare ).

In alternativa, è possibile provare a utilizzare le funzioni SetupDi* (ovvero API di installazione) per capire se il dispositivo USB che corrisponde alla stampante è collegato in questo momento.

+0

+1 Il rilevamento del dispositivo di corrispondenza USB è un buon punto di partenza. Forse questo richiede un nuovo post. – menjaraz