2011-03-16 77 views
0

即时通讯开发一个Windows应用程序,我需要从扫描仪读取数据...我知道关于专注于文本框的Kyeboards楔形扫描仪...但单用户if我想与多个扫描仪一起工作,然后我如何阅读?从多个条形码扫描仪读取数据到C#应用程序

+0

我回答了[类似的问题(http://stackoverflow.com/questions/5259569/pos-for-净分化之间条码扫描仪和键盘输入)。 – CheeZe5 2011-03-16 11:48:26

回答

0

取决于扫描仪及其API。如果它只是模拟键盘,你将会很难。尝试检查API以查看它是否支持打开流,可能是串口等。这样,您可以分别打开每个扫描仪,并根据需要从每个扫描仪读取。

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

1

如果扫描仪充当HID设备,那么他们只是在键盘上输入符号时才发送符号,那么您将无法了解扫描仪是否具有此符号。此外,您甚至无法了解用户是否在键盘或扫描仪上键入了任何内容,并向您发送了一些符号,只是出现。

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

一些条码扫描器支持与主机进行通信,即,它们可以通过串口通信(即在你的情况下优选的方式),或者它们可以作为HID装置起作用(什么是不适合你的情况下)的不同模式,还有其他一些选择。模式可以通过程序进行更改,也可以使用条形码手册附带的特殊条形码进行更改。请参阅您的条形码手册以阐明它。

1

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

用于.NET的Microsoft服务点可作为free download from Microsoft提供。

Microsoft.PointOfService程序集定义了POS应用程序和用于连接和控制POS for .NET支持的许多设备的服务对象之间的编程接口契约。一提到这个组件添加到项目中:

  1. 右键单击Solution Explorer中的“参考”,然后单击“添加引用...”

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

  3. 导航到包含文件夹“%ProgramFiles%\ Microsoft Point Of Service \ SDK”的文件夹,选择参考文件“Microsoft.PointOfService.dll” 单击“确定”以添加参考。

再加入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; 
     } 
    } 

注:你可以找到POS一个良好的书面教程.NEThere

希望这有助于:)

相关问题