我正在使用C#和WPF开发POS机。我需要检查现金抽屉是否打开,以便告知用户在下次销售之前将其关闭。
我的现金抽屉是连到一台ECLine收据打印机的dynapos(我没有安装驱动程序,只是使用Windows的通用驱动程序)。这台打印机通过USB连接到电脑。到目前为止,我可以使用RawPrinterHelper打印,并使用以下方法打开现金抽屉:
与我打开现金抽屉的方式相同,希望通过发送一些字节来获取其状态。我在this中找到了一个解决方案,其中说:
要获取抽屉的状态,我需要使用DLE EOT n
问题是,当使用SendBytesToPrinter方法时,无法从RawPrinterHelper获得响应,因此我无法知道这些字节是否正确。
问题:
1)有没有办法使用RawPrinterHelper获取此状态?
2)如果我发送的字节不正确,如何确定哪些是正确的?
3)我需要为打印机安装驱动程序吗?我已经阅读了一些人们的文章,但我不想这样做,因为我的POS所安装的每个地点都有不同的硬件。
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
问题是,当使用SendBytesToPrinter方法时,无法从RawPrinterHelper获得响应,因此我无法知道这些字节是否正确。
问题:
1)有没有办法使用RawPrinterHelper获取此状态?
2)如果我发送的字节不正确,如何确定哪些是正确的?
3)我需要为打印机安装驱动程序吗?我已经阅读了一些人们的文章,但我不想这样做,因为我的POS所安装的每个地点都有不同的硬件。