Подключите POS-принтер через USB в c # [закрыто]

StackOverflow https://stackoverflow.com/questions/187465

  •  06-07-2019
  •  | 
  •  

Вопрос

Есть идеи, как мне лучше всего управлять USB POS-принтером с c #. POS-принтеры обычно бывают последовательными, на основе TCP / IP или USB. Я знаю, как выполнить последовательный и TCP / IP, но не имею понятия о связи через USB в C #. Я знаю, что у Microsoft есть слой под названием POS.NET, но я хочу попытаться избежать этого. Буду очень признателен за любые идеи или любые библиотеки C #, которые люди могут порекомендовать. Благодаря

Это было полезно?

Решение

Вам действительно следует рассмотреть возможность использования POS для сервисных объектов .NET и OPOS или .NET (например, Epson предоставляет оба варианта). POS для .NET соответствует отраслевому стандарту UnifiedPOS для взаимодействия с этими устройствами.

Другие советы

Если принтер регистрируется как устройство интерфейса пользователя, вы можете P / ВЗЯТЬ в соответствующие 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 );

Здесь есть оболочка C # для API Win32 USP от ребят из icsharpcode здесь , и Я видел по крайней мере одну другую ссылку на USB-вещи в .Net.

Что может быть непросто, так это то, что для работы принтера требуется OPOS. Несколько лет назад я немного поработал над POS-проектом в .Net, и, насколько я помню, OPOS в значительной степени является стандартом для аппаратной части (и в то время все API-интерфейсы OPOS использовали COM-взаимодействие). Устройства иногда также имеют документированный собственный протокол связи, и в этом случае вы сможете использовать его для связи с устройством с помощью библиотеки USB.

Если вы уже свернули свой собственный код управления принтером, вы можете передать команды напрямую на принтер, настроив принтер с помощью " Generic / Text " Драйвер принтера на USB-порту. Этот драйвер не будет повторно интерпретировать контрольные коды и пытаться их распечатать, а просто передаст их на принтер как есть.

Тогда порт USB можно использовать так же, как и любой другой принтер.

Этот подход работал для меня в системе POS, которую я разработал.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top