从多个条形码扫描仪读取数据到C#应用程序
我正在开发一个windows应用程序,需要从扫描仪中读取数据…我知道kyeboards楔形扫描仪将重点放在文本框上…但这适用于单个用户如果我想使用多个扫描仪,那么如何读取???取决于扫描仪及其API。如果它只是模拟一个键盘,你将有一个困难的时候。试着检查API,看看它是否支持打开流,比如串口之类的。这样,您可以单独打开每个扫描仪,并根据需要读取每个扫描仪的内容从多个条形码扫描仪读取数据到C#应用程序,c#,hardware,barcode-scanner,C#,Hardware,Barcode Scanner,我正在开发一个windows应用程序,需要从扫描仪中读取数据…我知道kyeboards楔形扫描仪将重点放在文本框上…但这适用于单个用户如果我想使用多个扫描仪,那么如何读取???取决于扫描仪及其API。如果它只是模拟一个键盘,你将有一个困难的时候。试着检查API,看看它是否支持打开流,比如串口之类的。这样,您可以单独打开每个扫描仪,并根据需要读取每个扫描仪的内容 希望您拥有的扫描仪可以作为单独的输入流打开。取决于扫描仪及其API。如果它只是模拟一个键盘,你将有一个困难的时候。试着检查API,看看它
希望您拥有的扫描仪可以作为单独的输入流打开。取决于扫描仪及其API。如果它只是模拟一个键盘,你将有一个困难的时候。试着检查API,看看它是否支持打开流,比如串口之类的。这样,您可以单独打开每个扫描仪,并根据需要读取每个扫描仪的内容
让我们希望您拥有的扫描仪可以作为单独的输入流打开。如果扫描仪充当HID设备,这意味着他们只是在键盘上键入符号时发送符号,那么您将无法理解,这个符号来自于什么扫描仪。此外,你们甚至无法理解用户是否在键盘或扫描仪上键入了任何东西,并向你们发送了一些符号,它只是出现而已 几乎每个条形码扫描仪都有自己的协议,通常非常简单,可以通过串口进行通信。你只需要实现这个协议。有时几个扫描仪(来自不同的供应商)使用相同的协议,在这种情况下,支持它们会更容易
一些条形码扫描仪支持与主机进行不同的通信模式,即它们可以通过串行端口进行通信(这是您的首选方式),或者它们可以充当HID设备(不适合您的情况),还有一些其他选项。模式可以通过编程或使用条形码手册附带的特殊条形码进行更改。请参阅您的条形码手册以澄清此问题。如果扫描仪充当HID设备,这意味着他们只是在键盘上键入符号时发送符号,那么您将无法理解此符号来自于什么扫描仪。此外,你们甚至无法理解用户是否在键盘或扫描仪上键入了任何东西,并向你们发送了一些符号,它只是出现而已 几乎每个条形码扫描仪都有自己的协议,通常非常简单,可以通过串口进行通信。你只需要实现这个协议。有时几个扫描仪(来自不同的供应商)使用相同的协议,在这种情况下,支持它们会更容易
一些条形码扫描仪支持与主机进行不同的通信模式,即它们可以通过串行端口进行通信(这是您的首选方式),或者它们可以充当HID设备(不适合您的情况),还有一些其他选项。模式可以通过编程或使用条形码手册附带的特殊条形码进行更改。请参阅您的条形码手册进行说明。您可以使用Microsoft POS for.NET为.NET应用程序提供了简单一致的接口,用于与30多个服务点(POS)外围设备进行通信。设备列表包括条形码扫描仪、磁条读卡器(MSR)、线路显示器、PIN码板、RFID读卡器、生物识别读卡器、收据打印机、现金抽屉等。POS for.NET是微软实施的行业统一服务点(UPOS)标准。POS for.NET使独立软件供应商和独立硬件供应商都可以轻松地使用Microsoft.NET支持广泛的外围设备。此外,Microsoft POS for.NET为ISV和最终客户提供了统一POS之外的许多优势 Microsoft.NET服务点可作为提供
Microsoft.PointOfService
程序集定义POS应用程序和服务对象之间的编程接口契约,用于连接和控制POS for.NET支持的许多设备。将对此程序集的引用添加到项目中:
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上找到一篇写得很好的教程
希望这有帮助:)您可以使用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和最终客户提供了统一POS之外的许多优势
Microsoft.NET服务点可作为提供
Microsoft.PointOfService
程序集定义POS应用程序和服务对象之间的编程接口约定,用于连接和控制POS for.NET支持的许多设备。将此程序集的引用添加到项目中:
右键单击解决方案资源管理器中的“引用”,然后单击“添加引用”