C# – Talking to a printer


Is there a way to write some code that can 'talk' to printer in order to get some basic info about it's status? What I'm really interested in doing is finding out if it has run out of paper or has a paper jam – things of that nature. Should I use System.Management library for this type of stuff?

PS – It would also be handy to know how to get a hold of all the printers that have been set up on a particular PC. How would you go about that?

Best Solution

Getting information from Printers using System.Management is relatively easy.

    //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

Look at http://msdn.microsoft.com/en-us/library/aa394363.aspx for methods and properties of Win32_Printer. For your question:

//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
Related Question