c# - USB 条码扫描器和 WM_KEYDOWN

标签 c# .net usb barcode barcode-scanner

我正在尝试编写一个可以读取条形码扫描仪的程序。此外,即使应用程序不是焦点窗口(即在系统托盘中运行等),我也需要它来读取输入。

我找到了这篇文章,标题为 Distinguishing Barcode Scanners from the Keyboard in WinForms ,这似乎解决了确切的问题。它工作得很好,它检测我的设备并处理 WM_INPUT 消息。

但是,它正在检查 RAWINPUT.keyboard.Message 是否为 WM_KEYDOWN (0x100)。它似乎从来没有收到过这个。我在 article 中提供的代码中更改的唯一一行代码正在添加 Console.Out.WriteLine 来输出该消息的实际值:

Console.Out.WriteLine("message: {0}", raw.keyboard.Message.ToString("X"));
if (raw.keyboard.Message == NativeMethods.WM_KEYDOWN)
{
    ....

这是它的输出:

message: B
message: 1000B
message: 3
message: 10003
message: 8
message: 10008
message: 3
message: 10003
message: 5
message: 10005
message: 3
message: 10003
message: 8
message: 10008
message: 8
message: 10008
message: 4
message: 10004
message: 9
message: 10009
message: 9
message: 10009
message: 3
message: 10003

正确完成后我期望收到的值是:

257232709

我通过扫描到记事本进行了验证。

我不知道操作系统是否与这里相关,但我想我应该提到我在 Windows 7 64 和 Visual Studio 2010 以及 .NET Framework 3.5 中运行它。扫描仪是USB条码扫描仪,Symbol LS2208,设置为“HID KEYBOARD EMULATION”

最佳答案

只是想补充一点,microsoft POS.net,一个来自 Microsoft 的免费库,用于构建服务点系统,允许您读取最常见的条形码扫描仪,并在扫描条形码时为您提供一个事件。该库是免费的,并且得到了很好的支持,并且可以与任何具有 OPOS 驱动程序的条形码扫描仪配合使用。

关于c# - USB 条码扫描器和 WM_KEYDOWN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2841747/

相关文章:

c# - 你能构造一个正则表达式来用下划线替换不需要的字符吗?

c# - PropertyGrid 替代品

c# - 为什么 LINQ 方法 Any 不检查计数?

c# - 仅使用 ToString 将字节转换为两位十六进制数?

c# - 是否可以模拟 FTDI USB 设备?

当 USB 电缆循环时,Android ADB-over-WiFi 仍然断开连接(?!?)

android - 如何通过 USB 将 Android 应用程序与 PC 上的 C++ 程序连接起来

c# - 当我将对象类型保存到集合中时,泛型是否进行装箱/拆箱

c# - ASP.net 页面未加载 CSS 并出现错误加载资源失败

.net - NuGet Packager Task 在 VSTS 中使用错误的 MSBuild?