Я пытаюсь получить статус принтера принтера этикеток Zebra. Я пробовал WMI, проверял PrinterState, PrinterStatus, ExtendedPrinterStatus, DetectedErrorState, ExtendedDetectedErrorState, но я всегда получаю такие значения, как Unknown или Idle. В принтере фактически нет бумаги, и я хочу получить этот статус. Сама область «Принтеры Windows» также сообщает о состоянии «Готово». Я установил небольшое приложение Zebra Status Monitor, и оно правильно сообщает «Нет бумаги».
Я думаю, мне может понадобиться вызвать некоторые API-интерфейсы Windows, чтобы напрямую запросить принтер. У Zebra эта ссылка , которая показывает использование GetPrinter () и GetPrinterData (). Я нашел этот пример C # использования GetPrinter (), который работает и содержит полезную информацию, но Status равен 0, и я не вижу ничего, что указывает на отсутствие бумаги.
Теперь я хотел бы попытаться использовать GetPrinterData (), который этот документ Zebra использует и проверяет на PRINTER_STATUS_PAPER_OUT
. Используя этот GetPrinter () код для OpenPrinter () (что успешно), я попробовал несколько вариантов GetPrinterData (). Вот один из них:
uint pType = 0;
uint pcbNeeded = 0;
uint result1 = GetPrinterData(pHandle, "Error", out pType, null, 0, out pcbNeeded);
result1 - это всегда значение 2, а pcbNeeded - значение 0. Даже если я выключаю принтер или если в принтере есть бумага, я всегда получаю эти же значения.
Очень поможет любая информация о том, как правильно выполнить pInvoke GetPrinterData () или о том, как получить фактическое состояние принтера.