我刚收到Datalogic Falcon X3 +条形码设备,并被问到是否可以创建一个读取条形码的javascript应用程序并通过sql将其发送到数据库。
由于我不是真的进入C ++ / C#和Visual Studio 2008中的Windows SDK,我不确切知道如何开始。在datalogic的主页上,我发现了一些用JavaScript编写的ActiveX API示例,用于扫描(Memor X3 SDK)。
5个文件:
var BARCODE_ID_CODE_UNDEFINED=-1;
var BARCODE_ID_CODE_25_CIP_HR=0;
var BARCODE_ID_CODE_25_INTERLEAVED=1;
var BARCODE_ID_CODE_25_INDUSTRIAL=2;
var SCAN_PARAM_WAVE_FILE=67108864;
var SCAN_PARAM_TIMEOUT=67108865;
var SCAN_PARAM_BEEPER_DURATION=67108866;
var SCAN_PARAM_KEYBOARD_EMULATION=67108871;
//ScanEnable...
function ScanEnable(sAction)
{
if (sAction=="ENABLE")
{
DatalogicScanner1.bScanEnabled = true;
//ENABLE Continuous Mode PARAM ONLY IF READER == PORT REDIRECTOR
var nReaderType = oScannerSetup.getReaderIdentifier();
if (nReaderType==SE_READER_PR_CLASS_ID)
{
oScannerSetup.setParameter(SCAN_PARAM_CONTINUOUS_MODE,SCAN_PARAM_ENABLE);
}
}
else
{
//DISABLE Continuous Mode PARAM ONLY IF READER == PORT REDIRECTOR
var nReaderType = oScannerSetup.getReaderIdentifier();
if (nReaderType==SE_READER_PR_CLASS_ID)
{
oScannerSetup.setParameter(SCAN_PARAM_CONTINUOUS_MODE,SCAN_PARAM_DISABLE);
}
DatalogicScanner1.bScanEnabled = false;
}
if (DatalogicScanner1.bScanEnabled == true)
{
btnSoftTrigger.disabled = false;
return("DISABLE");
}
btnSoftTrigger.disabled = true;
return("ENABLE");
}
当使用Falcon X3 +以任何文本形式扫描条形码时,它不会将解码的条形码作为文本发送。意思是,我无法通过按键事件获取条形码。 Falcon在其控制面板中有一个名为“解码”的应用程序。只有在此应用程序中,您才能看到解码数据。
我找不到可以将模式切换为keyboard_emulation = true
或类似内容的设置。
我刚刚尝试的是将示例javascript放到Web服务器上,然后使用Falcon X3 +的Internet Explorer(包含在Windows CE 6.5中)访问该.htm文件。但在这里我遇到了同样的问题 - 没有传输解码数据。
那里有没有人已经为datalogic falcon x3(可能甚至基于javascript?)提供了一些简单的东西,我可以使用吗?
谢谢!
答案 0 :(得分:0)
您可能不想使用ActiveX。
您可以合理地将其设为普通的html文本框并设置扫描仪,以便在扫描时将解码的条形码输入文本框。
然后,提交到外部运行的网络服务。
答案 1 :(得分:0)
尽管这是一个古老的问题,并且没有特别明确地提出,但仍然没有公认的答案(截至2020-01-28)。我提出了以下非常简单的解决方案,并在代码后讨论了几个重要的警告:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Scanner Test</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body>
<p>The following form accepts input from a barcode scanner.</p>
<hr>
<form method='post' action='scan.php'>
<table>
<tr>
<td>Scanner Input:</td>
<td><input id='scanval' name='scanval' value=''></td>
</tr>
</table>
<input type='submit' name='submit' value='Submit'>
</form>
<script>
window.onload = function() { document.getElementById('scanval').focus(); }
</script>
</body>
</html>
自然,这在所有主流浏览器中都可以正常工作。诀窍是使其能够在Windows CE设备(在我的情况下是Datalogic Falcon X3 +条码扫描器)的IE浏览器中工作。要求将焦点放在页面加载时的输入字段上,以便用户无需单击或点击等即可立即开始扫描条形码。
当然,有很多方法可以设置焦点,但是在此特定环境中似乎唯一可行的方法是使用window.onload
,并在结束后出现 </form>
标签。
我们希望大多数浏览器在按Enter / Return键时自动提交表单。幸运的是,这可以在Windows CE上的IE中使用。因此,严格来说,我们不需要表单上的Submit按钮。扫描程序显然包含<cr>
或<cr><lf>
来终止每次扫描,因此该表单是自动提交的。
但是...奇怪的是,当在此设备上调用自动提交时,submit
输入值不会传输到服务器。我在服务器上使用PHP来处理传入的表单数据,并且从扫描仪收到的$_POST
数据结构仅包含scanval
输入字段值,而不包含submit
值。
正如人们可能期望的那样,我通常会寻找submit
按钮输入,以确认表单已成功发布到服务器。确定扫描器仅发送scanval
,而没有发送其他邮件,花了一段时间和大量的头部刮擦。
最后,在Windows CE的IE浏览器设置中有一个User Agent
配置选项,可让您从Windows CE
,Pocket PC
或Same as Windows XP
中进行选择。我发现将其设置为Windows XP
时似乎效果最好。那不是很明显。
无论如何,我希望这将来可能对其他人有所帮助!