c# - 检查现金抽屉是打开还是关闭

标签 c# .net opos pos

我正在使用 C# 和 WPF 开发一个 POS。我需要检查现金抽屉是否打开,以告诉用户它需要在下次销售前关闭。

我的现金抽屉是一个连接到收据打印机 ECLine 的发电机(我没有安装驱动程序,只是使用 Windows 的通用程序),这台打印机通过 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解决方案中说:

To get the status of the drawer I need to use DLE EOT n

问题是我无法知道字节是否正确,因为在使用 SendBytesToPrinter 时我无法从 RawPrinterHelper 获得响应方法。

问题:

1) 有没有办法使用 RawPrinterHelper 获取此状态?

2) 如果我发送的字节不正确,我如何确定哪些是正确的?

3) 我需要为打印机安装驱动程序吗?我听说有人这样做,但我不想这样做,因为安装我的 POS 的每个地方都有不同的硬件。

最佳答案

使用您正在使用的 Windows 打印后台处理程序 API,应用程序无法知道打印机/现金抽屉状态。

根据打印机的供应商,您可能已经提供了一个设备驱动程序,该驱动程序具有自己的扩展功能来了解状态。

例如,EPSON provides a status API function with the name Advanced Printer Driver. (因为找不到英文说明页,引入日文页)

询问您的打印机供应商是否可以使用这些扩展 API。

当没有扩展API时,考虑以下方法之一。

1.切换到EPSON等有扩展API的打印机。
2.将打印机切换为连接COM端口的外设模式,而不是Windows打印机,直接使用COM端口发送和接收ESC/POS命令和响应。
3.安装OPOS/POS for .NET/JavaPOS之一,切换打印机控制方式和钱箱控制方式。

关于c# - 检查现金抽屉是打开还是关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50613028/

相关文章:

c# - 类库中的 ASP.NET Core DI?

c# - 从另一个类/命名空间访问表单标签

c# - 任务栏中的应用程序标题而不是标题栏

c# - AsParallel() 方法在 PCL 中受支持但在 .NET Standard 1.3 中不可用?

Javascript 到 ActiveX 变量类型

delphi - 在哪里可以找到 "ESC/POS"Epson 条码测试程序?

c# - 我如何使用 Fluent NHibernate 来区分父关系的列

c# - "Enable Debugging of Unmanaged Code"在哪里可以在系统运行时编辑代码?

java - 使用 .net 和 java 中的 jUddi v3