实现条码枪的无焦点扫码

本文介绍了如何实现条码枪在无焦点状态下进行扫码操作,优化用户体验。通过创建扫描监听器 BarcodeScannerListener,利用WindowInteropHelper绑定事件来处理扫描数据,并在WPF应用中实现MVVM模式下的调用。配置条码枪硬件ID并保存在配置文件中,使得系统在前台运行时,无需将焦点置于文本框,即可进行扫码操作,提升了工作效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


    在上一家公司创业初期,我接触的第一个项目是医院的供应室消毒包管理系统,几乎一人之力用了两个多月的时间,完成了基本的开发工作。回想起来,当时有个设计印象深刻。趁着还有记忆,记录下来,供大家一时之需。

    当时开发的时候,对于物资的管理,自然离不开条码枪的角色。设计的是无线条码枪,让工作人员可以自由的在作业现场走动。但是有个用户体验问题,就是一般情况下,条码枪扫描的时候,都需要将输入焦点放到文本框之中,这个限制会造成极为不好的用户体验。此外,在流程设计的时候,实际上一系列操作动作,是使用扫描不同命令条码后,实现的。比如启动某功能,扫码后,确定继续下一个动作等等,全程不用碰PC机。

当时工作现场的示意图

所以问题的核心就在于是否可以接触焦点必须放到文本框之中的限制。
此方法并不是原创,但是原始代码是对WinForm平台进行开发的,被我修改为支持WPF平台。并且原文的链接已经失效,所以这段代码还是很有价值的。


现在放出几个关键点的代码,加以说明,全部代码在最后放出链接:
1.扫描监听器BarcodeScannerListener

使用WindowInteropHelper获取传入窗体的句柄,并且绑定ThreadFilterMessage事件,达到从而可以触发ProcessRawInputMessage方法

/// <summary>
/// 将监听器附着到窗体上
/// </summary>
/// <param name="form">需要附着的窗体(WPF)</param>
public void Attach(Window form)
{
    var helper = new WindowInteropHelper(form);
    IntPtr hwnd = helper.Handle;
    form.KeyDown += (sender, args) =>
    {
        if (_ControlHandled)
        {
            args.Handled = true;
            _ControlHandled = false;
        }
    };
    DoAttach(hwnd);
}

/// <
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值