Datalogic Falcon X3 - 条码扫描仪

时间:2015-04-02 14:41:03

标签: javascript barcode-scanner

我刚收到Datalogic Falcon X3 +条形码设备,并被问到是否可以创建一个读取条形码的javascript应用程序并通过sql将其发送到数据库。

由于我不是真的进入C ++ / C#和Visual Studio 2008中的Windows SDK,我不确切知道如何开始。在datalogic的主页上,我发现了一些用JavaScript编写的ActiveX API示例,用于扫描(Memor X3 SDK)。

5个文件:

  • BARCODE_Identifiers.js
  • SCAN_PARAMENTERS.js
  • jsBarcodeIdDemo.htm
  • jsScanDemo.htm
  • jsScanSetupDemo.htm

BARCODE_Identifiers.js - 摘录

    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;

SCAN_PARAMETERS.js - 摘录

    var SCAN_PARAM_WAVE_FILE=67108864;
    var SCAN_PARAM_TIMEOUT=67108865;
    var SCAN_PARAM_BEEPER_DURATION=67108866;
    var SCAN_PARAM_KEYBOARD_EMULATION=67108871;

jsScanDemo.htm - 摘录

    //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?)提供了一些简单的东西,我可以使用吗?

谢谢!

2 个答案:

答案 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 CEPocket PCSame as Windows XP中进行选择。我发现将其设置为Windows XP时似乎效果最好。那不是很明显。

无论如何,我希望这将来可能对其他人有所帮助!