- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写一个可以读取条码扫描仪的程序。此外,即使应用程序不是焦点窗口(即在系统托盘中运行等),我也需要它来读取输入。
我找到了这篇标题为 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/
MSDN 文档说 LParam 前 15 位用于重复计数,但它说它不是累积的 现在除非我在这里遗漏了一些东西,为什么它称它为重复计数但说它不是累积的? 这是一个矛盾的说法?它说它可以,但它没有?或者我
这个问题在这里已经有了答案: Keyboard Input & the Win32 message loop (2 个答案) 关闭 8 年前。 我正在尝试做一个非常简单的任务——当按下一个键时发生一
我目前正在尝试从我自己的 InputBox 的 WM_KEYDOWN 和 WM_CHAR 消息中获取键盘输入。 这是我用于基本输入的代码,它适用于字符: if(msg.message == WM_
我使用 WM_KEYDOWN/WM_KEYUP 定义了一些函数来处理输入,但似乎只有 WM_KEYUP 可以正常工作。当使用利用 WM_KEYDOWN 的函数时,什么也没有发生。 (不显示调试消息)
我有一个窗口可以创建许多其他常用控件,例如菜单、带有按钮和组合框的工具栏以及状态栏。问题是每当我按 Enter 或 Esc 时窗口都不会收到 WM_KEYDOWN 消息,但我需要处理这些消息。是否有任
我试图让我的应用程序在按下 CTRL+S 时执行某些操作。我只是不确定 W 和 L 参数如何为 WM_KEYDOWN 工作。 MSDN 有一些关于位域的内容,我不确定。如何检测 CTRL 和 S?谢谢
我一直在尝试找出程序中的错误。我注意到,每当我按住向上和向左箭头键并按空格键时,我的 WndProc 永远不会接收或处理 WM_KEYDOWN 消息以及 WPARAM 为 VK_SPACE。 我有点好
我试图让我的程序在按下 shift 键时切换 bool 值。但是,出于某种原因,它似乎没有收到消息,因为我已经将 MessageBoxes 放在 KEYDOWN 和 KEYUP 的情况下,并且它们没有
这是一个相当不寻常的问题,但我需要一些关于 Win32 究竟如何处理不同的按键事件的解释。 WM_KEYDOWN 当您想要接收长按时使用,例如如果您在游戏中,并且想要前进,请按向上箭头键或“W”键
我正在尝试通过 PostMessage 向一个应用程序发送击键。我正在使用 Spy++ 来尝试了解如何发送消息,因为我不完全了解其内部工作原理。 在这张图片中,第一个项目(选中的项目)是用我自己实际击
我正在尝试编写一个可以读取条码扫描仪的程序。此外,即使应用程序不是焦点窗口(即在系统托盘中运行等),我也需要它来读取输入。 我找到了这篇标题为 Distinguishing Barcode Scann
我有这个代码: public static void Next() { Process[] processes = Process.GetProcessesByName
win32 中是否有一个函数可以获取 CTRL、ALT 或大写锁定键的虚拟键代码并返回一个字符串“CTRL”、“ALT”、“CAPSLOCK”? 我只能接收 WM_KEYDOWN 消息,不能接收 WM
我正在编写一个可以将击键发送到另一个应用程序的应用程序。当我硬编码要发送的文本时,我有一些工作。但是,当我使用 argv[] 从参数列表中获取文本时,它不再发送文本,而是发送数字或什么都不显示。我认为
我需要有关 WM_KEYDOWN 的帮助,我想消除第一次按键和重复按键之间的“暂停”。 如果你持续按住一个按钮,我希望程序直接实现它。 我正在尝试使用 directx 制作游戏。请告诉我是否应该使用
如果 WM_KEYDOWN 有一个 messagebox() 以便理解这个案例的功能。 谁能帮我看看为什么这个case没 react ? 我正在尝试调试这个,同时我从键盘和调试器插入一些字母,但没有出
Win32 应用程序如何只响应第一个 WM_KEYDOWN 通知? MSDN 文档声称第 30 位“指定先前的 key 状态。如果在发送消息之前 key 已关闭,则值为 1,如果 key 已启动,则值
我刚开始MFC编程,之前没有做过任何UI设计和编程。我想知道为什么假设键盘正常工作,当每个被按下的键肯定会被释放时,Windows 会生成两条消息 WM_KEYUP 和 WM_KEYDOWN。 我认为
我在编辑框中处理 WM_KEYDOWN 消息。 我正在处理一堆键,但对于某些键(例如选项卡),我想阻止可显示字符附加到编辑框。 case WM_KEYDOWN: { switc
public class sendKeys { [DllImport("user32.dll")] public static extern IntPtr FindWindow(str
我是一名优秀的程序员,十分优秀!