Подключите POS-принтер через USB в c # [закрыто]
-
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, которую я разработал.