AttnSoft.BarcodeHook
A Cross-platform industrial barcode gun without focus input component. 一个跨平台的工业条码枪无焦点输入组件
Install / Use
/learn @liaiwu/AttnSoft.BarcodeHookREADME
AttnSoft.BarcodeHook
A Cross-platform industrial barcode gun without focus input component.
一个跨平台的工业条码枪无焦点输入组件
系统说明
本系统支持两种模式实现扫码枪无焦点输入:
1、使用键盘钩子实现(适合单个扫码枪)
2、使用系统API实现(适合多扫码枪)
Windows下可以使用以上两种模式,Linux下仅支持API模式。
功能特性
1、键盘钩子模式通过单例模式及引用计数,实现键盘钩子全局仅注入一次,减少系统消息处理开销。
2、通过操作系统API,直接监听原始硬件输入,实现工业条码枪无焦点输入。
3、通过API获取硬件ID,以区分不同的扫码枪输入。
4、高效的解码逻辑,支持自定义前缀、后缀或条码长度解析读取条码。
5、动态设备管理,支持热插拔设备。
快速开始
1、安装NuGet包 首先,项目中安装 AttnSoft.BarcodeHook NuGet 包:
Install-Package AttnSoft.BarcodeHook
键盘钩子模式(适合单一扫码枪)
1、创建钩子
BarcodeReaders scanerHook = new BarcodeReaders ();
2、绑定事件并启动钩子
scanerHook.ScanerEvent += ScanerHook_BarCodeEvent;
scanerHook.Start();
3、处理扫码事件
private void ScanerHook_BarCodeEvent(string barcode)
{
this.listBox1.Items.Add(barcode);
}
4、停止钩子
scanerHook.Stop();
API模式(适合多扫码枪)
1、创建监听
BarcodeApiReader scanerHook = new BarcodeApiReader();
//指定监听设备。默认为空,监听所有设备。
scanerHook.DeviceId = "HID_VID_1EAB&PID_3222&MI_00_7&39461ef6&0&0000";
2、绑定事件并启动监听
scanerHook.ScanerEvent += ScanerHook_BarCodeEvent;
scanerHook.Start();
3、处理扫码事件
private void ScanerHook_BarCodeEvent(HookResult hookResult)
{
//string deviceId= hookResult.DeviceId;//当前设备ID
//如果未指定监听设备ID,可在这里可根据设备ID进行过滤。
//string barcode = hookResult.Barcode;//条码
this.listBox1.Items.Add(hookResult.Barcode);
}
4、停止监听
scanerHook.Stop();
如何获取设备ID
可参考示例:UsbTest
//获取所有输入设备
var deviceList= scanerHook.GetDeviceList()
//监听扫码枪的插入与移除事件
scanerHook.DeviceAction+=ScanerHook_DeviceAction;
自定义条码格式
var readSetting = new BarCodeReadSetting()
{
BarcodeHeader = "^",//条码前缀
Trailer = "\r",//条码结尾
BarcodeLength = 20//条码长度
};
BarcodeReaders scanerHook = new BarcodeReaders(readSetting);
不指定条码格式时,系统内部默认为以回车符结尾的条码格式:
BarcodeReaders scanerHook = new BarcodeReaders(new BarCodeReadSetting { Trailer="\r"});
超时触发模式
在解决扫码枪无焦点输入问题后,部分用户可能会遇到以下情况:操作软件时,最后的焦点停留在某个按钮上,导致扫码时误触发按钮事件。 由于大部分扫码枪的条码格式以回车符结尾,去掉回车符可以避免误触发按钮事件,但同时也会导致原本以回车符为结束标志的条码无法正常触发。
为了解决这一问题,本模块引入了超时触发模式。当最后一个字符到达后,如果在指定时间内没有新的字符到达,系统会认为扫码结束并触发扫码事件。
启用超时触发模式
通过以下代码配置超时触发模式(即去掉所有条码格式,系统自动进入超时触发模式):
var readSetting = new BarCodeReadSetting()
{
BarcodeHeader = "",//条码前缀
Trailer = "",//去掉条码结尾
BarcodeLength = 0 //条码长度
};
BarcodeApiReader scanerHook = new BarcodeApiReader(readSetting);
注意事项:
1、采用无格式触,不要使用键盘钩子模式,会导致用户的普通键盘输入触发扫码事件。建议采用API模式并绑定设备ID,这样避免了误触发。
2、处理扫码事件时,如果要访问UI控件,请加入InvokeRequired判断并处理异步,因为超时触发不在UI线程。
3、Linux下需要当前用户在input组下。参考如下命令将当前用户添加到input组:
sudo usermod -aG input $USER
UsbTest运行示例
此示例演示了多扫码枪无焦点输入时的运行效果.
在不同的窗口,通过鼠标右键菜单选择扫码枪设备,即可监听指定的设备。
AvaDemo在Linux下t运行示例

支持框架
| .NET框架名称 | 是否支持 | | -------------------------- | -------- | | .NET Framework 4.0 | 支持 | | .NET Core 2.0 、3.1 | 支持 | | .NET 5 to last version | 支持 |
开源链接
Github: https://github.com/liaiwu/AttnSoft.BarcodeHook.git
Gitee: https://gitee.com/attnsoft/AttnSoft.BarcodeHook.git
Related Skills
node-connect
337.7kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
83.3kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
337.7kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
83.3kCommit, push, and open a PR
