Я использую класс RawPrinterHelper
от Microsoft, http://support.microsoft.com/kb/322091, для печати на принтере Zebra KR403 из кода C #, и все работает нормально.
Я хочу отслеживать состояние принтера на наличие замятий бумаги и перебоев в работе.Я нашел запрос, который могу отправить на принтер "~ HQES" или "esc eng 6", который вернет все, что мне нужно.Проблема в том, что я не могу понять, как отправить этот запрос на принтер, который позволит принтеру ответить.WritePrinter
в классе RawPrinterHelper
, похоже, возвращает только тип bool или long.
Я также пытался использовать объект Win32_printer
, чтобы найти PrinterStatus/PrinterState/Errors
принтера.используя следующий метод:
public static string PrinterStateCheck(string szPrinterName)
{
string query = string.Format("SELECT * from Win32_Printer WHERE Name LIKE '%{0}%'", szPrinterName);
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
ManagementObjectCollection collection = searcher.Get();
string errorName = "";
foreach (ManagementObject printer in collection)
{
int state = Convert.ToInt32(printer["PrinterState"]);
errorName = state.ToString();
}
return errorName;
Используя этот метод, я попытался получить PrinterState
, PrinterStatus
и DetectedErrorState
, но ни один из них не ответил с нужной мне информацией.PrinterState
всегда возвращает 1024
, PrinterStatus
всегда возвращает 4
, а DetectedErrorState
всегда возвращает 2
.Хотя PrinterState
вернул 0
при правильной печати и 1024
на событии замятия бумаги или носителя для нескольких отпечатков, теперь он просто возвращает 1024
при каждом вызове.обнаружил, что Zebra создала собственное программное обеспечение для мониторинга принтеров в сети.Проблема в том, что наши принтеры не подключены к сети и подключены к клиентскому компьютеру только через USB.Кроме того, мы надеемся проверить состояние принтера до или после печати каждой квитанции.
Я надеюсь, что из winspool.Drv
есть что-то, что я могу использовать для отправки необработанных данных на принтер иполучать данные обратно от принтера.
Сейчас я использую функцию ReadPrinter
winspool.Drv
, но функция возвращает 0
, что означает, что ответ от принтера не доступен.Обычно это означает, что принтер не настроен для двунаправленной связи, но я уверен, что это так.Флажок «Включить двунаправленную поддержку» установлен на вкладке «Порты» свойств принтера.Кроме того, утилиты установки Zebra могут правильно запрашивать принтер и получать ответ в окне «Прямая связь».
Спасибо за любой совет,
Джереми