Conduzca una impresora POS a través de USB en c # [cerrado]
-
06-07-2019 - |
Pregunta
Alguna idea de cómo puedo manejar mejor una impresora POS USB desde c #. Las impresoras de punto de venta suelen ser de serie, TCP / IP o USB. Sé cómo lograr seriales y TCP / IP, pero no tengo idea de las comunicaciones a través de USB en C #. Sé que hay una capa disponible de Microsoft llamada POS.NET, pero quiero intentar evitar usar esto. Cualquier idea o cualquier biblioteca de C # que la gente pueda recomendar sería realmente apreciada. Gracias
Solución
Debería considerar usar POS para .NET y OPOS u objetos de servicio .NET (Epson, por ejemplo, proporciona ambos). POS para .NET se ajusta al estándar de la industria UnifiedPOS para la interfaz con estos dispositivos.
Otros consejos
Si la impresora se registra como un dispositivo de interfaz humana, puede P / INVOCAR en las API de Win32 apropiadas . Aquí están las firmas:
[ 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 );
Hay un contenedor C # para la API de Win32 USP de los chicos de icsharpcode aquí , y He visto al menos una otra referencia a Material USB en .Net.
Lo que puede ser complicado es si la impresora requiere o no OPOS para funcionar. Trabajé un poco en un proyecto POS en .Net hace unos años, y por lo que recuerdo, OPOS es prácticamente el estándar para el lado del hardware (y en ese momento todas las API de OPOS utilizaban interoperabilidad COM). Los dispositivos a veces también tienen un protocolo de comunicaciones propietario documentado, en cuyo caso debería poder utilizarlo para comunicarse con el dispositivo utilizando la biblioteca USB.
Si ya ha enrollado su propio código de control de la impresora, puede pasar los comandos directamente a la impresora configurando la impresora utilizando el " Genérico / Texto " controlador de impresora en el puerto USB. Ese controlador no volverá a interpretar los códigos de control e intentará imprimirlos, pero simplemente los entregará a la impresora tal como están.
Entonces el puerto USB se puede usar como cualquier otra impresora.
Este enfoque funcionó para mí en un sistema POS que desarrollé.