c# - 检查钱箱是打开还是关闭
问题描述
我正在使用带有 WPF 的 c# 开发 POS。我需要检查现金抽屉是否打开,以告诉用户它需要在下一次出售之前关闭。
我的钱箱是一个连接到收据打印机 ECLine 的 dynapos(我没有安装驱动程序,只使用 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);
就像我能够打开钱箱一样,我希望通过发送一些字节来获取它的状态。我找到了这个解决方案,其中说:
要获取抽屉的状态,我需要使用 DLE EOT n
问题是我无法知道字节是否是好的字节,因为RawPrinterHelper
在使用该SendBytesToPrinter
方法时我无法得到响应。
问题:
1) 有没有办法使用 RawPrinterHelper 获得此状态?
2)如果我发送的字节不是正确的,我如何确定哪些是正确的?
3) 我需要为打印机安装驱动程序吗?我读过一些人这样做,但我不想这样做,因为安装我的 POS 的每个地方都有不同的硬件。
解决方案
使用您正在使用的 Windows 打印后台处理程序 API,应用程序无法知道打印机/钱箱状态。
根据打印机的供应商,您可能已经提供了一个设备驱动程序,该驱动程序具有自己的扩展功能来了解状态。
例如,EPSON 提供名为 Advanced Printer Driver 的状态 API 函数。(因为找不到英文解释页面,所以引入了日文页面)
如果这些扩展 API 可用,请询问您的打印机供应商。
当没有扩展 API 时,考虑以下方法之一。
1.切换到有扩展API的打印机如EPSON。
2.将打印机切换到作为连接到COM端口而不是Windows打印机的外围设备运行的模式,并使用COM端口直接发送和接收ESC/POS命令和响应。
3.安装OPOS/POS for .NET/JavaPOS之一,切换打印机和钱箱控制方式。
推荐阅读
- csv - 将逗号添加到 TSV 文件中的坐标
- c - 使用 ptrace (linux, c) 从入口点跟踪程序
- node.js - heroku node.js 应用程序中的部署错误
- docker - 如何更改现有 docker 网络的配置
- python - 是否可以创建一个池来并行化已经作为池的 for 循环?
- python - dotenv 不会加载到 docker 容器中
- r - 如何在 R 中创建出生日期列
- reporting-services - 确定任何行是否满足数据集中的特定条件
- javascript - 在没有滚动的情况下到达页面底部时如何在JS中触发事件
- javascript - 尝试使用 Python 通过 asyncio websockets 服务器将 b64 编码的 PNG 图像发送到 JavaScript 客户端