3

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

4

1 に答える 1

2

お使いのWindowsプリントスプーラーAPIでは、アプリケーションがプリンター/キャッシュドロアーの状態を知ることができません。

プリンターのベンダーによっては、ステータスを知るための独自の拡張機能を持つデバイスドライバーを提供している場合があります。

たとえば、EPSON は Advanced Printer Driver という名前のステータス API 関数を提供しています。(英語の説明ページが見つからなかったため、日本語ページを紹介)

これらの拡張 API が利用可能かどうかは、プリンターのベンダーに問い合わせてください。

拡張 API がない場合は、以下のいずれかの方法が考えられます。

1.拡張APIが存在するEPSONなどのプリンターに切り替えます。
2. Windowsプリンターではなく、COMポートに接続された周辺機器として動作するモードにプリンターを切り替え、COMポートを使用してESC/POSコマンドとレスポンスを直接送受信します。
3.OPOS/POS for.NET/JavaPOSのいずれかをインストールし、プリンターとキャッシュドロアーの制御方式を切り替えます。

于 2018-05-31T13:47:20.190 に答える