【问题标题】:Intercept Barcode Scanner, Pass to Application with Focus When Done?拦截条码扫描器,完成后以焦点传递给应用程序?
【发布时间】:2013-03-19 02:48:09
【问题描述】:

有没有办法拦截 USB 条形码扫描仪的输入,利用它,然后将其传递给具有焦点的应用程序?

我们目前使用条形码扫描仪将订单货件信息加载到 Endicia 和 FedEx。当这些应用程序启动时,查找字段将获得焦点。当您扫描条形码时,文本会被传递到字段中,然后这些应用程序会查找其余的客户信息。这个过程效果很好。

现在我们正在尝试通过比较实际订单重量与应有的重量来限制拣货错误。为了实时执行此操作,我需要拦截扫描仪输入并使用它检查数据库中计算的重量与实际秤重量。如果它大幅偏离,我想显示一条警告消息。

我还需要能够将条形码传回具有焦点的原始应用程序中的正确字段,以便它可以查找货运数据。

有人做过这样的事吗?您能否指出一些有关拦截输入然后将其冒泡回到具有焦点的字段的资源?

注意:这是在 Windows 环境中。我最熟悉 C#,但 VB.net 也可以。

【问题讨论】:

  • 把条码扫描器想象成一个键盘,但当你扫描某些东西时,它会将条码发送到计算机。其他程序打开并将焦点放在文本框的原因是,当扫描仪扫描某些内容时,它会进入该字段。你想让扫描的条码去多个地方吗?
  • Rob,去多个地方就好了。我基本上需要它来做它目前所做的事情,但也有办法在另一个程序中捕获输入来做一些额外的处理。
  • 从阅读其他 cmets 的答案..您可以将信息保存到一个小文件中,然后从收集此数据的应用程序返回一个退出代码,该代码将通知您它已成功创建。那么您的其他程序会确信可以找到包含该信息的文件?

标签: c# windows input io


【解决方案1】:

您将要创建一个 windows 窗体,并在窗体的 Load 事件中,将焦点放在应输入条形码的 TextBox 上。然后在 TextBox 的 TextChanged 事件中,做任何你需要的处理。

http://msdn.microsoft.com/en-us/library/system.windows.forms.textbox.aspx

误解了这个问题,试着用谷歌搜索一下:

http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/5213874a-603e-4378-835d-f6488f382d47

【讨论】:

  • 但是如何将输入传递回原始应用程序中的正确字段?
  • 除非“原始”应用程序是您拥有源代码的应用程序,否则您可能无法(轻松)。您只需要再扫描一次。
  • 我不认为是这种情况,这就是我询问拦截的原因。不过还是谢谢。
【解决方案2】:

对于计算机而言,条码扫描器就像键盘,没有按键。当您扫描条码时,扫描仪会将条码转换为键盘输入。为了在第二个程序中捕获输入,您需要使用键盘挂钩。

查看this projectthis project。您可以制作一个使用这些键盘挂钩之一的程序,并且您使用条形码扫描仪扫描的任何数据也将被路由到您的程序。

【讨论】:

    【解决方案3】:

    您可以使用SendInput 函数将击键发送到当前聚焦的窗口,只要该窗口具有较低或相等的完整性级别。网络上有大量关于从 C# 调用该函数的信息。

    许多条码阅读器可以配置为在扫描开始时放置任意键码。让它输出您在 PC 上定义为热键的代码,以启动您的程序或将其带到前台。输入条形码后,销毁或隐藏窗口以将焦点恢复到先前的应用程序并调用 SendInput。

    【讨论】:

    • 我必须调查一下。我们已经在输入的末尾添加了一个键码,以便条形码提交。没想到要在它之前添加一个以打开另一个程序。想知道被触发的程序是否会以足够快的速度打开以接收其余的输入?或者这不是问题?
    • @Sam,是的,这是一个问题。您也可以延迟配置。
    • 我想我会尝试用键盘记录器来捎带这个想法。基本上,在输出前加上 F7 之类的东西,缓冲输入,直到我们点击附加的 Enter,然后使用 F7 和 Enter 之间的值进行处理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 2013-01-10
    相关资源
    最近更新 更多