任何想法如何我可以最好地驱动从C#的USB POS打印机。 POS打印机通常是基于串行,TCP/IP或USB的。 我知道如何完成串行和TCP/IP,但不知道通过USB在C#中的通信。 我知道微软有一个名为POS.NET的图层,但我想尽量避免使用它。 任何想法或任何C#图书馆,人们可以建议将非常感激。谢谢驾驶一台POS打印机通过USB在c#
5
A
回答
4
您应该考虑使用POS for .NET和OPOS或.NET服务对象(例如Epson提供)。 POS for .NET符合与这些设备接口的UnifiedPOS行业标准。
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);
1
1
如果您已经推出了自己的打印机控制代码,则可以通过使用USB端口上的“Generic/Text”打印机驱动程序设置打印机,直接将命令传递给打印机。该驱动程序不会重新解释控制代码并尝试打印它们,但它只会将它们按原样交给打印机。
然后USB端口可以像任何其他打印机一样使用。
这种方法适用于我开发的POS系统。
当您连接打印机时,它会尝试自行安装,并且由于没有驱动程序而失败。然后它出现在设备管理器的“其他设备”部分。 – JDibble 2008-10-09 15:15:33