質問

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 );

icsharpcodeのユーザーこちらからのWin32 USP APIのC#ラッパーがあります。少なくとも 1つの他の参照.NetのUSBスタッフ。

難しいのは、プリンターが機能するためにOPOSが必要かどうかです。私は数年前に.NetでPOSプロジェクトのいくつかの仕事をしましたが、私が覚えていることから、OPOSはハードウェア側のほとんどの標準でした(そして当時、すべてのOPOS APIはCOM相互運用機能を利用していました)。デバイスには文書化された独自の通信プロトコルもある場合があります。その場合、USBライブラリを使用してデバイスと通信するためにそれを利用できるはずです。

既に独自のプリンター制御コードをロールしている場合は、「Generic / Text」を使用してプリンターをセットアップすることにより、コマンドをプリンターに直接渡すことができます。 USBポートのプリンタードライバー。そのドライバーは制御コードを再解釈して印刷しようとしませんが、そのままプリンターに渡します。

その後、USBポートは他のプリンタと同じように使用できます。

このアプローチは、私が開発したPOSシステムで機能しました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top