Toutes les idées comment je peux mieux conduire une imprimante POS USB de C#. Les imprimantes POS sont généralement basées sur des ports série, TCP/IP ou USB. Je sais comment accomplir la série et TCP/IP mais n'ai aucune idée au sujet des communications par l'intermédiaire de l'USB dans C#. Je sais qu'il existe une couche disponible auprès de Microsoft appelée POS.NET, mais je veux essayer d'éviter cela. Toutes les idées ou les bibliothèques C# que les gens peuvent recommander seraient vraiment appréciées. MerciPiloter une imprimante POS via USB dans C#
Répondre
Vous devriez vraiment envisager d'utiliser les objets de service POS for .NET et OPOS ou .NET (Epson, par exemple, fournit les deux). POS pour .NET est conforme à la norme de l'industrie UnifiedPOS pour l'interfaçage avec ces dispositifs.
Si l'imprimante s'inscrit comme un périphérique d'interface utilisateur, vous pouvez P/INVOKE into the appropriate Win32 APIs. Voici les signatures:
[ 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);
Il y a un wrapper C# pour Win32 USP api de des gars de icsharpcode here, et j'ai vu au moins one autre référence à des choses USB en .Net.
Ce qui peut être difficile, c'est de savoir si l'imprimante a besoin d'OPOS pour fonctionner. J'ai travaillé sur un projet POS en .Net il y a quelques années, et d'après ce dont je me souviens, OPOS est à peu près la norme pour le matériel (et à l'époque, toutes les API OPOS utilisaient COM interop). Les appareils ont parfois aussi un protocole de communication propriétaire documenté, auquel cas vous devriez pouvoir utiliser cela pour parler à l'appareil en utilisant la bibliothèque USB.
Si vous avez déjà roulé votre propre code de contrôle d'imprimante, vous pouvez passer les commandes directement à l'imprimante en configurant l'imprimante en utilisant le pilote d'imprimante "Générique/Texte" sur le port USB. Ce pilote ne réinterprétera pas les codes de contrôle et essaiera de les imprimer, mais il les remettra à l'imprimante tel quel.
Ensuite, le port USB peut être utilisé comme n'importe quelle autre imprimante.
Cette approche a fonctionné pour moi sur un système de point de vente que j'ai développé.
Lorsque vous connectez l'imprimante, elle tente d'installer elle-même et échoue car aucun pilote n'est présent. Il apparaît ensuite dans la section "Autres périphériques" du Gestionnaire de périphériques. – JDibble