我正在使用带有WPF的c#开发POS。我需要检查现金抽屉是否打开,或者不告诉用户下一次出售前必须将其关闭。
我的现金抽屉是连接到收据打印机ECLine(我没有安装驱动程序,仅使用Windows的通用驱动程序)的dynapos,该打印机通过USB连接到PC。到目前为止,我可以使用RawPrinterHelper打印并使用以下方式打开现金抽屉:
byte[] codeOpenCashDrawer = new byte[] { 27, 112, 48, 55, 121 };
IntPtr pUnmanagedBytes = new IntPtr(0);
pUnmanagedBytes = Marshal.AllocCoTaskMem(5);
Marshal.Copy(codeOpenCashDrawer, 0, pUnmanagedBytes, 5);
RawPrinterHelper.SendBytesToPrinter(stringPrinterName, pUnmanagedBytes, 5);
Marshal.FreeCoTaskMem(pUnmanagedBytes);
我以同样的方式打开现金抽屉,希望通过发送一些字节来获取现金抽屉的状态。我找到了this解决方案,其中说:
要获取抽屉的状态,我需要使用DLE EOT n
问题是,由于使用
RawPrinterHelper
方法时无法从SendBytesToPrinter
获得响应,所以我无法知道字节是否是好的字节。问题:
1)有没有一种方法可以使用RawPrinterHelper来获得此状态?
2)如果我发送的字节不正确,我如何确定哪些是正确的?
3)我需要为打印机安装驱动程序吗?我已经读过一些这样做的人,但我不想这样做,因为安装POS的每个位置都有不同的硬件。
最佳答案
使用您使用的Windows打印后台处理程序API,应用程序无法知道打印机/收银机的状态。
根据打印机供应商的不同,您可能已经提供了设备驱动程序,该设备驱动程序具有自己的扩展功能以了解状态。
例如,EPSON provides a status API function with the name Advanced Printer Driver.(因为找不到英语说明页面,因此引入了日语页面)
询问您的打印机供应商是否提供了这些扩展API。
当没有扩展的API时,将考虑以下方法之一。
1.切换到存在扩展API的打印机,例如EPSON。
2.将打印机切换为可作为连接到COM端口而不是Windows打印机的外围设备的模式,并直接使用COM端口发送和接收ESC / POS命令和响应。
3.安装OPOS / POS for .NET / JavaPOS之一,并在打印机和钱箱的控制方法之间切换。
关于c# - 检查现金抽屉是打开还是关闭,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50613028/