【发布时间】:2013-10-02 02:53:01
【问题描述】:
我正在编写一个系统托盘应用程序,它会侦听 USB 条形码扫描仪并在读取匹配的条形码后启动一个互联网站点。 (条形码扫描仪像键盘一样提供按键序列输入)。 基于这篇文章Distinguishing Barcode Scanners from the Keyboard in WinForms。
我设法编写了这些功能:
程序侦听所有 WM_IMPUT 消息,并“捕捉”扫描的条形码,即使它在后台运行且未聚焦。
程序知道是用户键入键盘还是条形码扫描仪扫描,并仅选择来自扫描仪的输入(但条形码作为常规发送到前台窗口(即焦点))按键顺序,因为扫描仪就像键盘一样)。
我唯一需要做的是: 3. 如果输入来自条形码扫描仪 --> 阻止它被发送到任何其他应用程序或线程。 (假设您正在写一封电子邮件,然后您扫描 - 我不希望条形码被“输入”到您的电子邮件中)。
请帮助:是否可以阻止所有其他线程的“击键”?怎么做?
谢谢, 危害
【问题讨论】:
-
这篇文章解释了如何做到这一点并展示了所涉及的问题。 nicholas.piasecki.name/blog/2009/02/…
-
那篇链接的文章完全错了。使用低级键盘钩子过滤击键要容易得多,只需从回调中返回一个非零值。有大量的 C# 代码实现了 WH_KEYBOARD_LL 钩子。
-
@hanspassant,很有趣。怎么知道按键是不是来自低位钩子的条码扫描器?
标签: c# barcode-scanner