C#でUSB経由でPOSプリンターを駆動する[終了]
-
06-07-2019 - |
質問
c#からUSB POSプリンターを最適に駆動する方法はありますか。 POSプリンターは通常、シリアル、TCP / IPまたはUSBベースです。 シリアルとTCP / IPを実現する方法は知っていますが、C#でのUSBを介した通信についてはわかりません。 MicrosoftからPOS.NETと呼ばれるレイヤーが利用可能であることは知っていますが、これを使用しないようにしたいと思います。 人々が推奨できるアイデアやC#ライブラリは本当にありがたいです。ありがとう
解決
.NETおよびOPOSまたは.NETサービスオブジェクトのPOSの使用を検討する必要があります(たとえば、Epsonは両方を提供します)。 POS for .NETは、これらのデバイスとのインターフェースに関するUnifiedPOS業界標準に準拠しています。
他のヒント
プリンターがそれ自体をヒューマンインターフェイスデバイスとして登録する場合、P / INVOKEを適切なWin32 APIに。署名は次のとおりです。
[ 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 );
既に独自のプリンター制御コードをロールしている場合は、「Generic / Text」を使用してプリンターをセットアップすることにより、コマンドをプリンターに直接渡すことができます。 USBポートのプリンタードライバー。そのドライバーは制御コードを再解釈して印刷しようとしませんが、そのままプリンターに渡します。
その後、USBポートは他のプリンタと同じように使用できます。
このアプローチは、私が開発したPOSシステムで機能しました。
所属していません StackOverflow