Разговор с принтером

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

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


person Vidar    schedule 20.05.2009    source источник
comment
надевает шуточную шляпу мой отец печатник, и я разговариваю с ним каждый день.   -  person Ólafur Waage    schedule 20.05.2009
comment
Придерживайтесь программирования Олафур!! :)   -  person Vidar    schedule 20.05.2009


Ответы (2)


Получить информацию от принтеров с помощью 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
}
person RobV    schedule 20.05.2009

Вы также можете использовать LINQ to WMI API.

person Arsen Mkrtchyan    schedule 21.05.2009