2008-10-09 36 views
5

Bất kỳ ý tưởng nào về cách tôi có thể lái xe máy in POS USB tốt nhất từ ​​C#. Máy in POS thường được nối tiếp, TCP/IP hoặc USB. Tôi biết làm thế nào để hoàn thành nối tiếp và TCP/IP nhưng không có ý tưởng về thông tin liên lạc thông qua USB trong C#. Tôi biết rằng có một lớp có sẵn từ Microsoft được gọi là POS.NET, nhưng tôi muốn thử và tránh sử dụng điều này. Bất kỳ ý tưởng hoặc thư viện C# nào mà mọi người có thể đề xuất sẽ thực sự được đánh giá cao. Cảm ơnLái máy in POS qua USB trong C#

Trả lời

4

Bạn thực sự nên cân nhắc sử dụng POS cho các đối tượng dịch vụ .NET và OPOS hoặc .NET (ví dụ: Epson cung cấp cả hai). POS cho .NET tuân theo tiêu chuẩn công nghiệp UnifiedPOS để giao tiếp với các thiết bị này.

2

Nếu máy in tự đăng ký là Thiết bị giao diện con người, bạn có thể P/INVOKE into the appropriate Win32 APIs. Dưới đây là chữ ký:

[ 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

Khi bạn kết nối máy in, nó sẽ tự cài đặt và không thành công vì không có trình điều khiển nào. Sau đó, nó xuất hiện trong phần "Thiết bị khác" trong Trình quản lý thiết bị. – JDibble

1

Có một C# wrapper cho api của Win32 USP từ những kẻ icsharpcode here, và tôi đã nhìn thấy ít nhất one tài liệu tham khảo khác đến công cụ USB trong Net.

Điều khó hiểu là Máy in có yêu cầu OPOS để hoạt động hay không. Tôi đã làm một số công việc trên một dự án POS trong. Net một vài năm trở lại, và từ những gì tôi nhớ OPOS là khá nhiều tiêu chuẩn cho phần cứng của sự vật (Và tại thời điểm tất cả các API OPOS sử dụng COM interop). Các thiết bị đôi khi cũng có giao thức truyền thông độc quyền được ghi lại, trong trường hợp đó bạn có thể sử dụng nó để nói chuyện với thiết bị bằng thư viện USB.

1

Nếu bạn đã cuộn mã kiểm soát máy in của riêng mình thì bạn có thể chuyển các lệnh thẳng đến máy in bằng cách thiết lập máy in bằng trình điều khiển máy in "Chung/Văn bản" trên cổng USB. Trình điều khiển đó sẽ không giải thích lại mã kiểm soát và cố gắng in chúng, nhưng nó sẽ chỉ đưa chúng ra máy in.

Sau đó, cổng USB có thể được sử dụng giống như bất kỳ máy in nào khác.

Cách tiếp cận này đã hoạt động đối với tôi trên hệ thống POS mà tôi đã phát triển.

Các vấn đề liên quan