tags:

views:

192

answers:

2

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 hold of all the printers that have been set up on a particular PC - how would you go about that ??

+5  A: 

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
}
RobV
A: 

You can use LINQ to WMI api too.
[]http://www.codeplex.com/linq2wmi

ArsenMkrt