在c#中通过USB驱动POS打印机

任何想法如何我最好从c#驱动USB POS打印机。 POS打印机通常是串行,TCP / IP或USB。 我知道如何完成串行和TCP / IP,但不知道在C#中通过USB进行通信。 我知道微软有一个名为POS.NET的图层,但我想尽量避免使用它。 任何想法或人们可以推荐的任何C#库都会非常感激。 谢谢

您应该考虑使用POS for .NET和OPOS或.NET服务对象(Epson,例如提供两者)。 POS for .NET符合UnifiedPOS行业标准,可与这些设备连接。

如果打印机将自身注册为人机接口设备,则可以P / INVOKE进入相应的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 ); 

这里有来自icsharpcode的Win32 USP api的C#包装器,我在.Net中看到过至少一个其他的USB内容参考。

可能棘手的是打印机是否需要OPOS才能运行。 几年前我在.Net的一个POS项目上做了一些工作,从我记得OPOS几乎是硬件方面的标准(当时所有OPOS API都使用COM互操作)。 这些设备有时也有文档化的专有通信协议,在这种情况下,您应该能够利用它与USB库进行通信。

如果您已经推出了自己的打印机控制代码,则可以通过使用USB端口上的“Generic / Text”打印机驱动程序设置打印机,将命令直接传递到打印机。 该驱动程序不会重新解释控制代码并尝试打印它们,但它只是按原样将它们交给打印机。

然后可以像任何其他打印机一样使用USB端口。

这种方法适用于我开发的POS系统。