任何想法如何最好地从c#驱动USB POS打印机。 POS打印机通常是串行,TCP / IP或USB。 我知道如何完成串行和TCP / IP,但不知道在C#中通过USB进行通信。 我知道微软有一个名为POS.NET的图层,但我想尽量避免使用它。 任何想法或人们可以推荐的任何C#库都会非常感激。感谢
答案 0 :(得分:4)
您应该考虑使用POS for .NET和OPOS或.NET服务对象(例如Epson提供这两者)。 POS for .NET符合UnifiedPOS行业标准,可与这些设备连接。
答案 1 :(得分:2)
如果打印机将自身注册为人机接口设备,则可以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 );
答案 2 :(得分:1)
来自icsharpcode的人here有一个来自Win32 USP api的C#包装器,我在.Net中至少看到了one其他对USB内容的引用。
可能棘手的是打印机是否需要OPOS才能运行。几年前我在.Net的一个POS项目上做了一些工作,从我记得OPOS几乎是硬件方面的标准(当时所有OPOS API都使用COM互操作)。这些设备有时也有一个记录在案的专有通信协议,在这种情况下,您应该能够利用它与USB库进行通信。
答案 3 :(得分:1)
如果您已经推出了自己的打印机控制代码,则可以使用USB端口上的“Generic / Text”打印机驱动程序设置打印机,直接将命令传递给打印机。该驱动程序不会重新解释控制代码并尝试打印它们,但它只是将它们按原样交给打印机。
然后可以像使用任何其他打印机一样使用USB端口。
这种方法适用于我开发的POS系统。