首页 > 其他分享 >[MFC]区分USB扫码枪和键盘输入的实现

[MFC]区分USB扫码枪和键盘输入的实现

时间:2023-11-04 15:23:12浏览次数:38  
标签:条码 扫码 MFC USB bKeyFlag pMsg 按键 输入

不久前在帮客户做一个生产软件,要用到扫码枪输入一定长度的条码并且有条码长度防呆,结果发现手头的扫码枪居然是模拟键盘输入将条码数据直接发送到焦点控件中的(USB口的扫码枪),比如Edit Control,而由于业务要求,不允许生产线上员工手工输入条码内容,因此我将文本框设为只读,想不到扫码枪也无法输入了。后面百度了一下,也没找到什么好的办法,不过得到了一个可以通过按键输入间隔来识别是否人工输入的思路。

基本思路如下:USB扫码枪将条码内容模拟键盘输入所用的时间在50ms以内,在PreTranslateMessage(MSG* pMsg)函数中增加对键盘信息处理,先记录第一次按键的时间,然后后续每次按键的时间与之作对比,超过了设置的时间阈值的话,就会把文本框的内容全选,下一次输入的文本会覆盖掉之前的。由于生产用的条码足够长,即使员工手工快速输入的内容也达不到长度,后续代码会对条码长度进行防呆。

代码示例如下:

public:
    virtual BOOL PreTranslateMessage(MSG* pMsg);
    BOOL m_bKeyFlag;//按键是否第一次按下
    DWORD m_dwKeyDown;//记录第一次按键按下的时间

 

BOOL CDlgScan::PreTranslateMessage(MSG* pMsg)
{
    // TODO: 在此添加专用代码和/或调用基类
    if (pMsg->hwnd == GetDlgItem(IDC_EDIT_SCAN)->m_hWnd)
    {
        if (WM_KEYDOWN == pMsg->message)
        {
            if (!m_bKeyFlag)//记录第一次按键的时间,初始化为FALSE
            {
                m_bKeyFlag = TRUE;
                m_dwKeyDown = ::GetTickCount();
            }
            else//把这次的按键时间与上次作对比
            {
                if (::GetTickCount() - m_dwKeyDown > 50)
                {
                    CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT_SCAN);
                    pEdit->SetFocus();
                    pEdit->SetSel(0,-1);
                    m_bKeyFlag = FALSE;
                    return TRUE;
                }
            }
        }
    }

    return CDialog::PreTranslateMessage(pMsg);
}

如果大家有什么更好的方法,可以一起讨论下

标签:条码,扫码,MFC,USB,bKeyFlag,pMsg,按键,输入
From: https://www.cnblogs.com/St3ven/p/17809385.html

相关文章

  • uniapp小程序小bug,扫码进入小程序场景值为1001的情况之一。
    首先,这个问题原因是这样的用户第一次扫码进入小程序在app.vue的onLaunch下拿不到optiond的query对象的值场景值为1001,按照正常来说扫码进来应该是1047。排查原因只有用户在打开小程序的情况下没有杀掉进程只是切换页面到微信主页进行扫码进入小程序,结果就会出现扫码进入小程序的......
  • 手把手教你给网站增加微信扫码登录功能
    在网站开发中,我们经常会遇到需要给网站增加微信扫码登录的功能,一般来说有两种方式可以实现,一种是使用微信开放平台,另一种是使用微信认证服务号的参数二维码,网上以第一种居多,我们今天来说下第二种方式。首先准备一个【已认证】的微信服务号将公众号添加至【柠聚开发者平台】......
  • WSD、USB 和 TCP/IP 端口是连接和使用打印机的三种不同方法
    WSD、USB和TCP/IP端口是连接和使用打印机的三种不同方法,各自的特点如下:WSD(WebServicesonDevices)端口:WSD是一种基于网络的打印服务,允许计算机和打印机在局域网中通过网络发现彼此。它使用的是一种标准的网络协议,支持动态设备发现和配置。通常用于无线和有线的网络打......
  • 基恩士扫码枪配置及测试(RS232连接
       ......
  • 【全志R128外设模块配置】USB外设功能配置
    USB外设功能配置USB功能简介USB功能模块包括了USBHost,USBDevice和OTG功能。USBHost目前已经支持上的功能有:MassStorage,UVC。USBDevice目前已经支持上的功能有:ADB,UAC。OTG主要用作Host与Device的切换,如当板子通过USB线连接到USB主机(PC)上时,此时OTG是......
  • MFC---常用控件(下)(列表控件、树控件、标签控件)
    列表控件CListCtrl常用属性设置:view->Report(报表方式)常用接口关联控件变量后,测试接口://设置风格样式 //LVS_EX_GRIDLINES网格 //LVS_EX_FULLROWSELECT选中整行 m_list.SetExtendedStyle(m_list.GetExtendedStyle() |LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT); //插......
  • Mel频谱与MFCC技术分析
    Mel频谱与MFCC技术分析前言在音频领域,mel频谱和mfcc是非常重要的特征数据,在深度学习领域通常用此特征数据作为网络的输入训练模型,来解决音频领域的各种分类、分离等业务,如端点侦测、节奏识别、和弦识别、音高追踪、乐器分类、音源分离、回声消除等相关业务。当然,针对深度学习音......
  • 英特尔Wi-Fi 7无线网卡即将发布:支持PCIe、USB接口
    虽然电气和电子工程师协会(IEEE)还未正式批准Wi-Fi7(802.11be)规范标准,不过一些厂商已经将Wi-Fi7作为新款Z790主板的主要卖点。其中,很多主板都搭载了英特尔的Wi-Fi7产品,而英特尔还提供了不同形态Wi-Fi7无线网卡,预计会在今年上市。英特尔现在已经列出了两款Wi-Fi7无线网卡,分别为BE......
  • usb2.0协议复习--Apple的学习笔记
    一,前言10多年前买过一本圈圈教你usb,然后自己移植了代码到自己焊接的单片机最小系统,当时连原理图都是我自己画的,现在原理图软件已经不知道怎么用了,所以usb协议基本也忘记了。居然配置了usbhost那么简单,这样感觉都没有学习过什么,我还是希望要雁过留痕。所以下载了wiresharkusb抓包......
  • szfpga Lattice高速下载器HW-USBN-2B 常见问题解答
      .产品特点     1).支持windows7,Windows10操作系统,两个操作系统非常稳定不断线。  2).支持JTAG模式,速度快,最高30Mb/s,调试serdescore,不会像hw-usbn-2a出现错误。如这种错误Error:failedtosetcablepor(cable:USBport:EzUSB-0error:-1)  3). ......