我正在尝试一个简单的Windows窗体应用程序,其中用户扫描条形码,然后该应用程序对条形码进行解码,然后在数据库中插入一行。基本的跟踪应用程序。我拿起了Motorola扫描仪并下载了用于Windows开发的SDK。尽管在“开发人员指南”(http://support.symbol.com/support/search.do?cmd=displayKC&docType=kc&externalId=14978402apdf&sliceId=&dialogID=311240750&stateId=1%200%20311224446)中,“附录A使用SCANNER SDK API编写简单应用程序”似乎是一个不错的起点。我得到了5个控制台示例的正常运行,但无法使Windows窗体应用程序正常工作,因此从未触发过OnBarcode事件。我逐步跟踪了摩托罗拉的这段视频(http://www.youtube.com/watch?v=GfIWWUw4YSc&t=15m47s)。
我似乎与此有类似的问题:Motorola barcode scanner SDK events C#,但我正在使用USB连接。
我意识到示例代码最初是用.net 2.0编写的,因此我尝试重新编译该项目,但仍然无法正常工作。然后,我尝试将CCoreScannerClass更改为CCoreScanner,以便可以使用嵌入式互操作类型,但这也无济于事。这是示例代码:
using CoreScanner;
namespace Scanner_WindowsFormsApplication
{
public partial class Form1 : Form
{
CCoreScanner cCoreScanner;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
void OnBarcodeEvent(short eventType, ref string pscanData)
{
string barcode = pscanData;
this.Invoke((MethodInvoker)delegate { textBox1.Text = barcode; });
}
private void button1_Click(object sender, EventArgs e)
{
try
{
//Instantiate CoreScanner Class
cCoreScanner = new CCoreScanner();
//Call Open API
short[] scannerTypes = new short[1];//Scanner Types you are interested in
scannerTypes[0] = 1; // 1 for all scanner types
short numberOfScannerTypes = 1; // Size of the scannerTypes array
int status; // Extended API return code
cCoreScanner.Open(0, scannerTypes, numberOfScannerTypes, out status);
// Subscribe for barcode events in cCoreScannerClass
cCoreScanner.BarcodeEvent += new _ICoreScannerEvents_BarcodeEventEventHandler(OnBarcodeEvent);
// Let's subscribe for events
int opcode = 1001; // Method for Subscribe events
string outXML; // XML Output
string inXML = "<inArgs>" +
"<cmdArgs>" +
"<arg-int>1</arg-int>" + // Number of events you want to subscribe
"<arg-int>1</arg-int>" + // Comma separated event IDs
"</cmdArgs>" +
"</inArgs>";
cCoreScanner.ExecCommand(opcode, ref inXML, out outXML, out status);
Console.WriteLine(outXML);
}
catch (Exception exp)
{
Console.WriteLine("Something wrong please check... " + exp.Message);
}
}
}
}
我通读了开发人员指南,发现了以下内容:“ BarcodeEvent当扫描仪捕获条形码时触发。要接收BarcodeEvent,应用程序需要使用SUBSCRIBE_BARCODE事件类型执行REGISTER_FOR_EVENTS方法。“我是c#的新手,所以我真的不知道这意味着什么以及如何将其应用于示例。
如果https://stackoverflow.com/users/68043/scott读取此线程,我很想知道您如何使onBarcodeEvent在您的线程中起作用:Dialog hangs when called from event
要从Motorola Scanner SDK获得条形码事件,您的扫描仪应位于IBM手持式USB或SNAPI中。如果连接到串行端口,则它应处于NIXDORF模式B。如果您的扫描仪以HIDKB模式连接,则由于SDK是扫描仪,因此无法通过SDK进行条形码事件。我的建议是首先尝试使用SDK附带的示例应用程序的可执行文件,并检查是否可以从提供的应用程序中查看事件。
要将扫描仪配置为正确的模式,请参见documentation-第5和6页
[每次使用条形码扫描仪时,我发现将条形码扫描仪用作键盘要容易得多;即,将WinForms应用程序中的焦点放在文本框上,以等待条形码扫描,然后处理TextBox的text_changed事件
我只是遇到了同样的问题。在对Motorola文档进行了仔细的研究之后,我发现以下两行仅告诉扫描仪您要获取事件。 (打开事件)
int upcode = 1001
cCoreScanner.ExecCommand(opcode, ref inXML, out outXML, out status);
现在要进行条形码扫描,您需要发送操作码2011。因此该代码看起来像这样:
int upcode = 1001
cCoreScanner.ExecCommand(opcode, ref inXML, out outXML, out status);
int upcode = 2011
cCoreScanner.ExecCommand(opcode, ref inXML, out outXML, out status);
执行此操作时,我得到了BarcodeEvent
使用操作码2011,您可以触发USB HIDKB扫描仪的回码事件?
您还添加了以下代码段:
"<inArgs><scannerID>1</scannerID></inArgs>"
执行2011命令时?