2009-05-20 1 views
7

Есть ли способ написать код, который может «говорить» с принтером, чтобы получить базовую информацию о его статусе? Я действительно заинтересован в том, чтобы выяснить, закончилось ли оно бумагой или что-то вроде бумажного джем - вещи такого характера. Должен ли я использовать библиотеку System.Management для этого типа вещей?Говорить с принтером

PS - Было бы также полезно знать, как удержать все принтеры, которые были настроены на конкретном ПК. Как бы вы это сделали?

+0

* надеты шуткой * мой отец - принтер, и я каждый день разговариваю с ним. –

+0

Придерживайтесь программирования Олафура !! :) – Vidar

ответ

9

Получение информации от принтеров с использованием System.Management относительно просто.

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

Посмотрите на http://msdn.microsoft.com/en-us/library/aa394363.aspx методов и свойств Win32_Printer. На ваш вопрос:

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