Проверка состояния принтера c #

в моем приложении (Windows 7, VS2010), мне нужно уменьшить счетчик кредита после успешной печати изображения. В любом случае, прежде чем начинать весь процесс, я хотел бы узнать о состоянии принтера, чтобы предупредить пользователя о том, что бумага закончилась, застряла бумага и так далее. Теперь, осмотревшись, я нашел несколько примеров, в которых используется Windows WMI, но ... никогда не работает. Используя ЭТО фрагмент, например, состояние принтера всегда готово, даже если я извлекаю бумагу, открываю крышку ... выключаю принтер.

Теперь состояние принтера всегда хорошее, так что Я тестирую из офиса принтер, который удобно выключить дома. должен ли я взорвать устройство динамитом, чтобы получить статус ошибки принтера?

Это код, который я использовал

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)
{

    string name = objWMI["Name"].ToString().ToLower();

    if (name.Equals(printerName.ToLower()))
    {

        int state = Int32.Parse(objWMI["ExtendedPrinterStatus"].ToString());
        if ((state == 1) || //Other
        (state == 2) || //Unknown
        (state == 7) || //Offline
        (state == 9) || //error
        (state == 11) //Not Available
        )
        {
        throw new ApplicationException("hope you are finally offline");
        }

        state = Int32.Parse(objWMI["DetectedErrorState"].ToString());
        if (state != 2) //No error
        {
        throw new ApplicationException("hope you are finally offline");
        }

    }

}

Где 'printerName' принимается в качестве параметра.

Спасибо за совет.

12
задан Demodave 22 August 2018 в 20:24
поделиться