【发布时间】:2016-07-26 01:13:10
【问题描述】:
我正在尝试获取 Zebra 标签打印机的打印机状态。我试过 WMI,检查 PrinterState、PrinterStatus、ExtendedPrinterStatus、DetectedErrorState、ExtendedDetectedErrorState,但我总是得到诸如 Unknown 或 Idle 之类的值。打印机实际上没有纸了,我想得到那个状态。 Windows 打印机区域本身也报告“就绪”状态。我安装了一个小型 Zebra Status Monitor 应用程序,它正确地报告“缺纸”。
我想我可能需要调用一些 Windows API 来直接查询打印机。 Zebra 有 this reference,它显示了 GetPrinter() 和 GetPrinterData() 的使用。我发现 this C# example 使用 GetPrinter() 可以工作并包含很好的信息,但状态为 0,我没有看到任何表明缺纸的信息。
现在,我想尝试使用 Zebra document 使用的 GetPrinterData() 并检查 PRINTER_STATUS_PAPER_OUT。使用 GetPrinter() code 到 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() 或如何获取实际打印机状态的帮助都会非常有帮助。
【问题讨论】:
标签: c# pinvoke zebra-printers