2008-10-09 8 views
5

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

4

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.

2

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); 
+0

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

1

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.

1

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é.

Questions connexes