Любые идеи, как я могу лучше всего управлять USB-POS-принтером из C#. Принтеры POS обычно являются последовательными, TCP/IP или USB. Я знаю, как выполнить серийный и TCP/IP, но понятия не имею о связи через USB в C#. Я знаю, что есть слой, доступный от Microsoft под названием POS.NET, но я хочу попытаться избежать этого. Любые идеи или любые библиотеки C#, которые люди могут рекомендовать, будут действительно оценены. СпасибоПривод POS-принтера через USB в C#
ответ
Вы действительно должны рассмотреть возможность использования объектов POS для .NET и OPOS или .NET (например, Epson). POS для .NET соответствует отраслевому стандарту UnifiedPOS для взаимодействия с этими устройствами.
Если принтер зарегистрирован как устройство интерфейса пользователя, вы можете P/INVOKE into the appropriate Win32 APIs. Вот подписи:
[ 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 API, USP из icsharpcode парней here, и я видел, по крайней мере, one другой ссылки на USB материал в .Net.
Что может быть сложно, нужен ли принтер OPOS для того, чтобы функционировать. Я немного поработал над проектом POS в .Net несколько лет назад, и из того, что я помню, OPOS в значительной степени является стандартом для аппаратной части вещей (и в то время, когда все API OPOS использовали COM-взаимодействие). У устройств иногда также есть документированный протокол проприетарной связи, и в этом случае вы должны иметь возможность использовать это, чтобы разговаривать с устройством, используя библиотеку USB.
Если вы уже свернули свой собственный код управления принтером, вы можете передать команды прямо в принтер, установив принтер с помощью драйвера принтера «Общий/текст» на USB-порту. Этот драйвер не будет повторно интерпретировать коды управления и попытаться распечатать их, но он просто передаст их на принтер как есть.
Затем порт USB можно использовать точно так же как любой другой принтер.
Этот подход работал для меня в POS-системе, которую я разработал.
При подключении принтера он пытается установить себя и не работает, потому что нет драйверов. Затем он появляется в разделе «Другие устройства» в диспетчере устройств. – JDibble 2008-10-09 15:15:33