zoukankan      html  css  js  c++  java
  • 项目源码分享之[条码扫描后台监控程序]

    接下来我会整理一些做过的项目, 并将其中有通用性的代码开源出来, 如果有谁碰巧有这样的需求, 可以拿过去用就行了.

    项目背景:

    工人使用加工中心(数控机床)加工工件时, 需要根据工件的型号, 然后在用户界面上浏览找到对应的NC文件, 然后加工中心加载这个NC文件, 完成工件加工. 该加工中心的操作系统是Windows.

    问题是: 在加工中心上找文件, 因为键盘的缘故很不方便, 同时NC文件又特别多, 容易找错文件.

    我给出的方案是: 使用扫描枪, 条码为工件的型号, 通过型号和NC文件的映射关系, 可以得到NC文件名, 然后控制原有加工程序加载指定的NC文件.

    难点是: 加工中心操作系统是那种深度定制的Windows程序, 同时只能有一个窗口程序运行, 所以不能再做一个Window Form来接收条码值. 所以我开发了一个后台程序, 既然是后台程序, 即需要在后台监控扫描枪, 就有了下面这个BarcodeScanMonitor源码了.

    源码和文档:

    http://git.oschina.net/harrychinese/delphi_utils/tree/master/Barcode

    文档介绍见: http://git.oschina.net/harrychinese/delphi_utils/blob/master/Barcode/usage.md

    BarcodeScanMonitor 介绍

    功能:

    监控扫描枪的扫描动作.即使我们的程序不是Windows的当前活动程序, 也可以监控到.

    原理:

    采用Keyboard hook的方式实现监控. 其实扫描枪扫描的过程相当于键盘快速输入一段文字, 最后的回车相当于扫描结束

    测试方法:

    如果没有扫描枪, 可使用大键盘模拟, 但不能使用小键盘.

    已知问题:

    由于采用了消息hook机制, 监控的结果并不会百分百准确, 表现为: 数字有时会错位, 有时会重复, 有时会丢掉一位,
    如果准确度要求高, 有两种方法: 1.[已实现]为扫描枪设置扫描前缀和后缀, 用作验证, 如果监控的结果不包含这对前缀/后缀, 即舍弃监控结果. 2.[未实现]根据条码本身的验证算法, 对监控的结果进行验证

    使用方法:

    初始化 TBarcodeScanMonitor 实例, 然后设置必要的属性, 比如barcode的可能长度, barcode扫描最大耗时; 然后为扫描结束动作绑定一个事件; 最后启动扫描监控. 在你的扫描结束事件中, 就可以取到barcode值了.

    sample code :

        FBarReader:=TBarcodeScanMonitor.GetInstance();
        FBarReader.RelayKeyPress:=True;//按键被捕获后, 是否要继续将按键显示出来
        FBarReader.BarcodeLengths:='3,4'; //条码可能的长度
        FBarReader.ScanMaxDurationSecond:=10;//扫描条码的最大耗时
        FBarReader.AlwaysDuplicatedRead:=False; //防止条码值重复
        FBarReader.CheckPrefixStr:=''; //前缀验证码
        FBarReader.CheckSuffixStr:='';//后缀验证码
        FBarReader.AutoRemoveCheckStr:=True;
        FBarReader.HookedThreadId:=0; //0为OS级别的键盘hook
        FBarReader.OnScanFinished:=self.OnScanFinished1; //绑定一个扫描结束的事件
        if FBarReader.StartListenScan()=False then  //开始监听键盘
        begin
            Msg:= 'Barcode scanner failed to listen';
            Application.MessageBox(PChar(Msg),'Init failure',MB_OK+MB_ICONSTOP);
        end;                
    
  • 相关阅读:
    华为lab-rs-v1-2.11_OSPF与ISIS互通
    jdk源码分析红黑树——插入篇
    jdk源码分析PriorityQueue
    jdk源码分析ArrayDeque
    jdk链表笔记
    jdk顺序表笔记
    SpringMVC类型转换器、属性编辑器
    SpringMVC基本使用
    spring整合hibernate
    spring aop注解配置
  • 原文地址:https://www.cnblogs.com/harrychinese/p/barcodemonitor_source.html
Copyright © 2011-2022 走看看