核心扫描程序(摩托罗拉)事件未触发 C#
本文关键字:事件 扫描 程序 摩托罗拉 核心 | 更新日期: 2023-09-27 18:33:51
我正在尝试一个简单的Windows表单应用程序,其中用户扫描条形码,然后应用程序解码条形码,然后将一行插入数据库。基本的轨道应用程序。我拿起摩托罗拉扫描仪并下载了用于Windows开发的SDK。我读到"附录 A 使用扫描仪 SDK API 编写简单应用程序"似乎是开发人员指南(http://support.symbol.com/support/search.do?cmd=displayKC&docType=kc&externalId=14978402apdf&sliceId=&dialogID=311240750&stateId=1%200%20311224446(的好起点。我得到了 5 个控制台示例工作正常,但我无法让 Windows 表单应用程序工作,OnBarcode 事件永远不会被触发。我一步一步地关注了摩托罗拉的这个视频(http://www.youtube.com/watch?v=GfIWWUw4YSc&t=15m47s(。
我似乎遇到了与此类似的问题:摩托罗拉条形码扫描仪 SDK 事件 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);
}
}
}
}
我通读了开发人员指南,发现:"条形码事件在扫描仪捕获条形码时触发。若要接收 BarcodeEvents,应用程序需要使用 SUBSCRIBE_BARCODE 事件类型执行 REGISTER_FOR_EVENTS 方法。我是 c# 的新手,所以我真的不知道这意味着什么以及它如何应用于示例。
如果 https://stackoverflow.com/users/68043/scott 读取此线程,我很想知道您是如何让 onBarcodeEvent 在您的线程中起作用的: 从事件调用时对话框挂起
要从 Motorola Scanner SDK 获取条形码事件,您的扫描仪应采用 IBM 手持式 USB 或 SNAPI 格式。如果您的扫描仪以HIDKB模式连接,则无法通过SDK获得条形码事件,因为扫描仪用作键盘。我的建议是首先尝试SDK附带的示例应用程序的可执行文件,并检查是否可以从提供的应用程序中看到事件。
要将扫描仪配置为正确的模式,请参阅文档 - 第 5 页和第 6 页
每次使用条形码扫描仪时,我发现简单地将条形码扫描仪用作键盘要容易得多;即,将 WinForms 应用中的焦点放在文本框中以等待条形码扫描,然后处理文本框的text_changed事件
我刚刚遇到了同样的问题。在查看了摩托罗拉文档之后,我发现以下两行仅告知扫描程序要获取事件。(开启活动(
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);
这样做时,我确实得到了条形码事件
使用操作码 2011 设法触发 USB HIDKB 扫描仪的回码事件?
您是否还添加了以下代码的一部分:
"<inArgs><scannerID>1</scannerID></inArgs>"
执行 2011 命令时?