我正在尝试获取 Zebra 标签打印机的打印机状态。我试过 WMI,检查 PrinterState、PrinterStatus、ExtendedPrinterStatus、DetectedErrorState、ExtendedDetectedErrorState,但我总是得到诸如 Unknown 或 Idle 之类的值。打印机实际上没有纸了,我想得到那个状态。Windows 打印机区域本身也报告“就绪”状态。我安装了一个小型 Zebra Status Monitor 应用程序,它正确报告“缺纸”。
我想我可能需要 pInvoke 一些 Windows API 来直接查询打印机。Zebra 有此参考资料,其中显示了 GetPrinter() 和 GetPrinterData() 的用法。我发现了这个使用 GetPrinter() 的 C# 示例,它可以工作并包含很好的信息,但是状态为 0,我没有看到任何表明缺纸的内容。
现在,我想尝试使用Zebra 文档使用的 GetPrinterData()并检查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() 或如何获取实际打印机状态的任何帮助都将非常有帮助。