C# と WPF を使用して 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 がインストールされている場所ごとに異なるハードウェアがあるため、これを行いたくありません。