任何想法如何最好地从 c# 驱动 USB POS 打印机。POS 打印机通常是基于串行、TCP/IP 或 USB 的。我知道如何完成串行和 TCP/IP,但不知道如何在 C# 中通过 USB 进行通信。我知道微软提供了一个名为 POS.NET 的层,但我想尽量避免使用它。人们可以推荐的任何想法或任何 C# 库将不胜感激。谢谢
JDibble
问问题
10059 次
4 回答
6
您真的应该考虑将 POS 用于 .NET 和 OPOS 或 .NET 服务对象(例如,Epson 提供这两者)。.NET 的 POS 符合用于与这些设备连接的 UnifiedPOS 行业标准。
于 2009-03-04T01:46:26.097 回答
3
如果打印机将自己注册为人机接口设备,您可以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 );
于 2008-10-09T14:25:09.467 回答
1
如果您已经滚动了自己的打印机控制代码,那么您可以通过使用 USB 端口上的“通用/文本”打印机驱动程序设置打印机,将命令直接传递给打印机。该驱动程序不会重新解释控制代码并尝试打印它们,但它只会将它们按原样传递给打印机。
然后可以像使用任何其他打印机一样使用 USB 端口。
这种方法适用于我开发的 POS 系统。
于 2008-10-09T16:12:09.953 回答