Parlando con una stampante

C’è un modo per scrivere del codice che può ‘parlare’ alla stampante per ottenere alcune informazioni di base sul suo stato? Quello che mi interessa davvero è scoprire se ha esaurito la carta o ha un inceppamento di carta – cose di questa natura. Dovrei usare la libreria System.Management per questo tipo di cose?

PS – Sarebbe anche utile sapere come ottenere una sospensione di tutte le stampanti che sono state impostate su un particolare PC. Come andresti su questo?

Ottenere informazioni da Printers usando System.Management è relativamente facile.

//Declare WMI Variables ManagementObject MgmtObject; ManagementObjectCollection MgmtCollection; ManagementObjectSearcher MgmtSearcher; //Perform the search for printers and return the listing as a collection MgmtSearcher = new ManagementObjectSearcher("Select * from Win32_Printer"); MgmtCollection = MgmtSearcher.Get(); foreach (ManagementObject objWMI in MgmtCollection) { //Do whatever action you want with the Printer } 

Guardare http://msdn.microsoft.com/en-us/library/aa394363.aspx per i metodi e le proprietà di Win32_Printer. Per la tua domanda:

 //Test whether a Win32_Printer is out of paper or jammed int state = Int32.Parse(objWMI["PrinterState"]); if (state == 4) { //Paper Jam } else if (state == 5) { //Paper Out } 

Puoi anche usare LINQ to WMI api .