c# から USB POS プリンターを最適に駆動する方法を教えてください。POS プリンターは通常、シリアル、TCP/IP、または USB ベースです。シリアルと TCP/IP を実現する方法は知っていますが、C# での USB 経由の通信についてはわかりません。Microsoft から POS.NET と呼ばれるレイヤーが提供されていることは知っていますが、これを使用しないようにしたいと考えています。人々が推奨できるアイデアや C# ライブラリは本当にありがたいです。ありがとう
4 に答える
.NET および OPOS または .NET サービス オブジェクトに POS を使用することを実際に検討する必要があります (たとえば、Epson は両方を提供します)。POS for .NET は、これらのデバイスとのインターフェイスに関して UnifiedPOS 業界標準に準拠しています。
プリンター自体がヒューマン インターフェイス デバイスとして登録されている場合は、適切な Win32 API に P/INVOKEできます。署名は次のとおりです。
[ DllImport( "hid.dll", SetLastError=true ) ]
public static extern Boolean
HidD_FlushQueue( SafeFileHandle HidDeviceObject );
[ DllImport( "hid.dll", SetLastError=true ) ]
public static extern Boolean
HidD_FreePreparsedData( ref IntPtr PreparsedData );
[ DllImport( "hid.dll", SetLastError=true ) ]
public static extern Boolean
HidD_GetAttributes( SafeFileHandle HidDeviceObject
, ref HIDD_ATTRIBUTES Attributes );
[ DllImport( "hid.dll", SetLastError=true ) ]
public static extern Boolean
HidD_GetFeature( SafeFileHandle HidDeviceObject
, ref Byte lpReportBuffer
, Int32 ReportBufferLength );
[ DllImport( "hid.dll", SetLastError=true ) ]
public static extern Boolean
HidD_GetInputReport( SafeFileHandle HidDeviceObject
,ref Byte lpReportBuffer
,Int32 ReportBufferLength );
[ DllImport( "hid.dll", SetLastError=true ) ]
public static extern void HidD_GetHidGuid( ref System.Guid HidGuid );
[ DllImport( "hid.dll", SetLastError=true ) ]
public static extern Boolean
HidD_GetNumInputBuffers( SafeFileHandle HidDeviceObject
, ref Int32 NumberBuffers );
[ DllImport( "hid.dll", SetLastError=true ) ]
public static extern Boolean
HidD_GetPreparsedData( SafeFileHandle HidDeviceObject
,ref IntPtr PreparsedData );
[ DllImport( "hid.dll", SetLastError=true ) ]
public static extern Boolean
HidD_SetFeature( SafeFileHandle HidDeviceObject
, ref Byte lpReportBuffer
, Int32 ReportBufferLength );
[ DllImport( "hid.dll", SetLastError=true ) ]
public static extern Boolean
HidD_SetNumInputBuffers( SafeFileHandle HidDeviceObject
,Int32 NumberBuffers );
[ DllImport( "hid.dll", SetLastError=true ) ]
public static extern Boolean
HidD_SetOutputReport( SafeFileHandle HidDeviceObject
,ref Byte lpReportBuffer
,Int32 ReportBufferLength );
[ DllImport( "hid.dll", SetLastError=true ) ]
public static extern Int32
HidP_GetCaps( IntPtr PreparsedData, ref HIDP_CAPS Capabilities );
[ DllImport( "hid.dll", SetLastError=true ) ]
public static extern Int32
HidP_GetValueCaps( Int16 ReportType
, ref Byte ValueCaps
, ref Int16 ValueCapsLength
, IntPtr PreparsedData );
Win32 USP API の C# ラッパーが icsharpcode の連中からここにあり、.Net で USB に関する他の参照が少なくとも1 つ見られます。
注意が必要なのは、プリンターが機能するために OPOS が必要かどうかです。私は数年前に .Net で POS プロジェクトの作業を行いましたが、覚えている限りでは、OPOS はハードウェア側のほとんどの標準です (当時、すべての OPOS API は COM 相互運用機能を利用していました)。デバイスには文書化された独自の通信プロトコルがある場合もあります。その場合、USB ライブラリを使用してデバイスと通信するためにそれを利用できるはずです。
独自のプリンター制御コードを既に展開している場合は、USB ポートで「汎用/テキスト」プリンター ドライバーを使用してプリンターをセットアップすることにより、プリンターに直接コマンドを渡すことができます。そのドライバーは、制御コードを再解釈して印刷しようとはしませんが、そのままプリンターに渡します。
その後、USB ポートは他のプリンタと同じように使用できます。
このアプローチは、私が開発した POS システムでうまくいきました。