【发布时间】:2011-03-16 05:02:42
【问题描述】:
我正在开发一个 Windows 应用程序,我需要在其中读取来自扫描仪的数据...我知道专注于文本框的 kyeboards 楔形扫描仪...但是如果我想使用多个扫描仪,这适用于单个用户,那么如何我会读吗??
【问题讨论】:
-
我回复了similar question。
标签: c# hardware barcode-scanner
我正在开发一个 Windows 应用程序,我需要在其中读取来自扫描仪的数据...我知道专注于文本框的 kyeboards 楔形扫描仪...但是如果我想使用多个扫描仪,这适用于单个用户,那么如何我会读吗??
【问题讨论】:
标签: c# hardware barcode-scanner
您可以使用 Microsoft POS for .NET 为 .NET 应用程序提供简单且一致的接口,以便与超过 30 个服务点 (POS) 外围设备进行通信。设备列表包括条码扫描器、磁条阅读器 (MSR)、行显示器、密码键盘、RFID 阅读器、生物识别阅读器、收据打印机、现金抽屉等。 POS for .NET 是 Microsoft 对行业统一服务点 (UPOS) 标准的实施。 .NET 的 POS 使独立软件供应商和独立硬件供应商都可以轻松地支持使用 Microsoft .NET 的各种外围设备。此外,Microsoft POS for .NET 为 ISV 和最终客户提供了许多超越统一 POS 的优势
Microsoft .NET 服务点以free download from Microsoft 的形式提供。
Microsoft.PointOfService 程序集定义了 POS 应用程序和服务对象之间的编程接口契约,用于连接和控制 POS for .NET 支持的许多设备。将此程序集的引用添加到项目中:
在解决方案资源管理器中右键单击“引用”,然后单击“添加引用...”
在弹出的对话框中,选择“浏览”标签
通过导航到包含它的文件夹“%ProgramFiles%\Microsoft Point OfService\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 for .NET 教程 here
希望这会有所帮助:)
【讨论】:
如果扫描仪充当 HID 设备,这意味着它们只是在键盘上键入符号时发送符号,那么您将无法理解该符号来自哪个扫描仪。此外,您甚至无法理解用户是否在键盘上键入任何内容或扫描仪是否向您发送了一些符号,它只是出现。
几乎每个条码扫描器都有自己的协议,通常它非常简单,并且允许通过串行端口进行通信。你只需要实现那个协议。有时多个扫描仪(来自不同供应商)使用相同的协议,在这种情况下支持它们会更容易。
某些条码扫描器支持与主机通信的不同模式,即它们可以通过串行端口进行通信(这是您的首选方式),或者它们可以充当 HID 设备(不适合您的情况),还有其他一些选择。可以通过编程方式或使用条形码手册附带的特殊条形码更改模式。请参阅您的条形码手册以澄清它。
【讨论】:
取决于扫描仪及其 API。如果它只是模拟键盘,那么您将遇到困难。尝试检查 API 以查看它是否支持打开流,可能像串行端口或其他东西。这样,您可以分别打开每个扫描仪并根据需要读取每个扫描仪。
希望您拥有的扫描仪可以作为单独的输入流打开。
【讨论】: