2008-10-09 2 views
5

Любые идеи, как я могу лучше всего управлять USB-POS-принтером из C#. Принтеры POS обычно являются последовательными, TCP/IP или USB. Я знаю, как выполнить серийный и TCP/IP, но понятия не имею о связи через USB в C#. Я знаю, что есть слой, доступный от Microsoft под названием POS.NET, но я хочу попытаться избежать этого. Любые идеи или любые библиотеки C#, которые люди могут рекомендовать, будут действительно оценены. СпасибоПривод POS-принтера через USB в C#

ответ

4

Вы действительно должны рассмотреть возможность использования объектов POS для .NET и OPOS или .NET (например, Epson). POS для .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); 
+0

При подключении принтера он пытается установить себя и не работает, потому что нет драйверов. Затем он появляется в разделе «Другие устройства» в диспетчере устройств. – JDibble 2008-10-09 15:15:33

1

Существует С # обертки для Win32 API, USP из icsharpcode парней here, и я видел, по крайней мере, one другой ссылки на USB материал в .Net.

Что может быть сложно, нужен ли принтер OPOS для того, чтобы функционировать. Я немного поработал над проектом POS в .Net несколько лет назад, и из того, что я помню, OPOS в значительной степени является стандартом для аппаратной части вещей (и в то время, когда все API OPOS использовали COM-взаимодействие). У устройств иногда также есть документированный протокол проприетарной связи, и в этом случае вы должны иметь возможность использовать это, чтобы разговаривать с устройством, используя библиотеку USB.

1

Если вы уже свернули свой собственный код управления принтером, вы можете передать команды прямо в принтер, установив принтер с помощью драйвера принтера «Общий/текст» на USB-порту. Этот драйвер не будет повторно интерпретировать коды управления и попытаться распечатать их, но он просто передаст их на принтер как есть.

Затем порт USB можно использовать точно так же как любой другой принтер.

Этот подход работал для меня в POS-системе, которую я разработал.

Смежные вопросы