我正在使用RawPrinterHelperMicrosoft 的课程http://support.microsoft.com/kb/322091从 C# 代码打印到 Zebra KR403 打印机,一切正常。
我希望监控打印机的卡纸和断纸状态。我找到了一个可以发送到打印机的查询“~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总是返回 a 1024,PrinterStatus总是返回 a 4,DetectedErrorState总是返回 a 2。虽然PrinterState确实0在正确打印和1024卡纸或媒体输出事件中返回了几次打印,但现在它只是1024在每次调用时返回。
我还发现 Zebra 创建了自己的软件来监控网络上的打印机。问题是我们的打印机不在网络上,仅通过 USB 连接到客户端计算机。此外,我们希望在打印每张收据之前或之后检查打印机的状态。
我希望有一些东西winspool.Drv可以用来将原始数据发送到打印机并从打印机接收数据。
现在我正在使用 的ReadPrinter函数winspool.Drv,但该函数正在返回0,这意味着无法访问来自打印机的响应。这通常意味着打印机没有设置为双向通信,但我确信它是。在打印机属性的“端口”选项卡中选中“启用双向支持”复选框。此外,Zebra Setup Utilities 可以正确查询打印机并在其直接通信窗口中接收响应。
感谢您的任何建议,
杰里米