我正在使用RawPrinterHelper
Microsoft 的课程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 可以正确查询打印机并在其直接通信窗口中接收响应。
感谢您的任何建议,
杰里米