tickets - Conduzca una impresora POS a través de USB en c#
impresora termica no imprime completo (4)
Aquí hay un contenedor C # para api Win32 USP de los chicos de icsharpcode, y he visto al menos otra referencia a cosas USB en .Net.
Lo que puede ser complicado es si la impresora requiere o no OPOS para funcionar. Hice un poco de trabajo 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 de las cosas (y en ese momento todas las API OPOS utilizaban la interoperabilidad COM). Los dispositivos a veces también tienen un protocolo de comunicaciones patentado documentado, en cuyo caso debe poder utilizarlo para hablar con el dispositivo utilizando la biblioteca USB.
Alguna idea de cómo puedo manejar mejor una impresora POS USB desde c #. Las impresoras POS suelen ser de serie, TCP / IP o basadas en USB. Sé cómo lograr serial 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 y evitar el uso de esto. Cualquier idea o cualquier biblioteca de C # que la gente pueda recomendar sería muy apreciada. Gracias
Si la impresora se registra como un Dispositivo de Interfaz Humana, puede P / INVOCAR en las API 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 );
Si ya ha transferido su propio código de control de la impresora, puede pasar los comandos directamente a la impresora configurando la impresora con el controlador de impresora "Genérico / Texto" en el puerto USB. Ese controlador no volverá a interpretar los códigos de control e intentará imprimirlos, sino que simplemente los entregará a la impresora tal como está.
Entonces, el puerto USB se puede usar como cualquier otra impresora.
Este enfoque funcionó para mí en un sistema POS que desarrollé.
Debería considerar usar POS para .NET y objetos de servicio .NET o OPOS (Epson, por ejemplo, proporciona ambos). POS para .NET cumple con el estándar de la industria UnifiedPOS para interactuar con estos dispositivos.