从多个条形码扫描仪读取数据到C#应用程序

时间:2011-03-16 05:02:43

标签: c# hardware barcode-scanner

我正在开发一个Windows应用程序,我需要从扫描仪中读取数据...我知道kyeboards楔形扫描仪是专注于文本框...但这对于单个用户,如果我想使用多个扫描仪然后如何我读了吗?

3 个答案:

答案 0 :(得分:1)

如果扫描仪充当HID设备,这意味着它们只是在键盘上键入时发送符号,那么您将无法理解该符号来自哪个扫描仪。此外,您甚至无法理解用户是否在键盘上输入任何内容或扫描仪向您发送了一些符号,它就会出现。

几乎每个条形码扫描仪都有自己的协议,通常很简单,它允许通过串口进行通信。你只需要实现该协议。有时,几个扫描仪(来自不同供应商)使用相同的协议,在这种情况下,支持它们会更容易。

某些条形码扫描仪支持与主机通信的不同模式,即它们可以通过串口进行通信(这是您的首选方式),或者它们可以充当HID设备(不适合您的情况),还有其他一些选择。可以通过编程方式更改模式,也可以使用条形码手册附带的特殊条形码进行更改。请参阅条形码手册以澄清它。

答案 1 :(得分:1)

您可以使用Microsoft POS for .NET为.NET应用程序提供简单一致的界面,以便与30多个服务点(POS)外围设备进行通信。设备列表包括条形码扫描仪,磁条读取器(MSR),线路显示器,PIN键盘,RFID阅读器,生物识别读卡器,收据打印机,现金抽屉等等。 POS for .NET是Microsoft实施的行业统一服务点(UPOS)标准。 POS for .NET使独立软件供应商和独立硬件供应商可以轻松使用Microsoft .NET支持各种外围设备。此外,Microsoft POS for .NET为ISV和最终客户提供了许多优于Unified POS的优势

Microsoft的.NET服务点以free download from Microsoft提供。

Microsoft.PointOfService程序集定义POS应用程序和服务对象之间的编程接口契约,用于接口和控制POS for .NET支持的许多设备。将此程序集的引用添加到项目中:

  1. 右键单击解决方案资源管理器中的“引用”,然后单击“添加引用...”

  2. 在弹出的对话框中,选择“浏览”选项卡

  3. 通过导航到文件夹“%ProgramFiles%\ Microsoft Point of Service \ SDK”(包含它)来选择引用“Microsoft.PointOfService.dll”文件 单击“确定”添加引用。

  4. 然后将using语句添加到您的班级,就像这样

    using Microsoft.PointOfService;
    using System.Collections;
    

    然后你可以这样编写你的方法:

    private void ActivateScanner(DeviceInfo selectedScanner)
    {
        //Verify that the selectedScanner is not null
        // and that it is not the same scanner already selected
        if (selectedScanner != null && !selectedScanner.IsDeviceInfoOf(activeScanner))
        { 
            // Configure the new scanner
            DeactivateScanner();
    
            // Activate the new scanner
            UpdateEventHistory(string.Format(Activate Scanner: {0}",
                selectedScanner.ServiceObjectName));
            try
            {
                activeScanner = (Scanner)explorer.CreateInstance(selectedScanner);
                activeScanner.Open();
                activeScanner.Claim(1000);
                activeScanner.DeviceEnabled = true;
                activeScanner.DataEvent += newDataEventHandler(activeScanner_DataEvent);
                activeScanner.ErrorEvent += new DeviceErrorEventHandler(
                    activeScanner_ErrorEvent);
                activeScanner.DecodeData = true;
                activeScanner.DataEventEnabled = true;
            }
            catch (PosControlException)
            {
                // Log error and set the active scanner to none
                UpdateEventHistory(string.Format(Activation Failed: {0}",
                    selectedScanner.ServiceObjectName));
                activeScanner = null;
            }
        }
    

    <强> N.B。你可以找到关于POS for .NET的精心编写的教程 here

    希望这有助于:)

答案 2 :(得分:0)

取决于扫描仪及其API。如果它只是模拟键盘,那么你将会遇到困难。尝试检查API以查看它是否支持打开流,可能像串行端口或其他东西。这样,您可以单独打开每个扫描仪并根据需要从每个扫描仪中读取。

我们希望您拥有的扫描仪可以作为单独的输入流打开。