Question

Toutes les idées sur la manière de conduire une imprimante POS USB à partir de c #. Les imprimantes POS sont généralement des imprimantes série, TCP / IP ou USB. Je sais comment utiliser les protocoles série et TCP / IP, mais je n’ai aucune idée des communications via USB en C #. Je sais qu'il existe une couche disponible auprès de Microsoft appelée POS.NET, mais je souhaite éviter de l'utiliser. Toute idée ou bibliothèque C # que les gens peuvent recommander serait vraiment appréciée. Merci

Était-ce utile?

La solution

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 industrielle UnifiedPOS pour l’interfaçage avec ces périphériques.

Autres conseils

Si l'imprimante s'enregistre en tant que périphérique à interface humaine, vous pouvez P / INVOKE dans les API Win32 appropriées . 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 existe un wrapper C # pour les API Win32 USP des gars d'icsharpcode ici , et J'ai au moins une autre référence à Trucs USB en .Net.

Ce qui peut être délicat, c’est de savoir si l’imprimante nécessite ou non OPOS pour fonctionner. Il y a quelques années, j'ai travaillé sur un projet de point de vente sur .Net, et de ce que je me souviens, OPOS est à peu près la norme en matière de matériel (à l'époque, toutes les API OPOS utilisaient l'interopérabilité COM). Les périphériques disposent parfois aussi d’un protocole de communication propriétaire documenté, auquel cas vous devriez pouvoir l’utiliser pour communiquer avec le périphérique à l’aide de la bibliothèque USB.

Si vous avez déjà créé votre propre code de commande d'imprimante, vous pouvez transmettre les commandes directement à l'imprimante en configurant celle-ci à l'aide de l'option "Générique / Texte". pilote d'imprimante sur le port USB. Ce pilote ne réinterprétera pas les codes de contrôle et n'essayera pas de les imprimer, mais il les transmettra simplement tels quels à l'imprimante.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top