в моем приложении (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");
}
}
}
Где "имя_принтера" принимается в качестве параметра.
Спасибо за совет.