重定向第二个键盘的键盘输入



我正处于为现有POS程序开发配套应用程序的初始阶段。基本上,我在寻找类似钉板的功能。我们有一个Targus USB数字键盘,希望客户可以输入PIN号码。(这不是一个支付系统,只是一个客户帐户验证)。主POS程序将运行,但我需要我的应用程序在后台运行,等待输入PIN,然后进行身份验证。

可能的解决方案#1:我从代码项目下载了一个示例项目,该项目通过VID&PID。这将是完美的,但键盘在某种程度上受到Windows的保护,无法通过这种方式访问。有没有办法在Windows中"取消保留"键盘,使其仍然是HID设备,但不被视为键盘?

可能的解决方案#2:有一些键盘挂钩的例子,但这些都不起作用,因为键盘输出仍将进入POS应用程序。我需要键盘输出只转到我的后台应用程序,无论什么程序有焦点。有没有一种方法可以将特定键盘的输出重定向到特定应用程序?

这将推广到远程位置的100多个POS终端,因此最好采用不需要重新配置窗口的解决方案。它还需要在C#.NET 2.0 中

我曾经为POS解决方案跨过这座桥。我发现击键就是击键就是一次击键,简单明了。如果不编写自己的设备驱动程序,我就无法找到实现这一点的方法。

因此,我们的方法只是在等待客户输入pin时禁用收银员的输入访问权限,反之亦然,当收银员应该有输入访问权限而不是客户时。

我知道这不是你想听到的答案,但这是我通过经验找到的答案。

编辑:探索的东西。。。直接处理COM端口非常容易。您可以考虑COM键盘设备,而不是USB设备。这将使您能够更好地控制设备的输出。COM是一项相当古老的技术,找到带有这些端口的POS机可能很困难。这对我们来说不是一个选择,所以我们从未探索过

您的最佳选择是购买一个操纵杆"键盘",这样您就可以将设备(USB HID)作为非键盘/非鼠标读取(因为键盘和鼠标受到操作系统的限制,无法绕过,因为它被硬编码到设备管理中。)

我建议你看看PI Engineering的键盘,因为他们的键盘可以注册为操纵杆。他们有自定义的映射软件,可以模拟按下设备上的键,然后在windows消息队列中发送键(模拟键盘)。相反,您可以使用他们的SDK直接针对设备进行编程(因为每个键只是一个操纵杆按钮),不会干扰POS软件。

PI工程可编程键盘

USB访问说明(以下列出的相关部分,以防链接失效)

Microsoft Windows

Windows驱动程序开发工具包HID

Windows DDK HID API类似于Apple HID Manager,它是一个复杂的、低级别的API,与USB HID密切相关。一个程序可以访问或多或少的每一个设备,包括输入和输出,除了键盘和鼠标,微软故意从这个API中屏蔽了键盘和鼠标。与迄今为止涵盖的其他API不同,读取机制的性质使得在没有专门用于从队列中读取事件的线程的情况下很难使用。乍一看,为了使用此API,可能需要购买Microsoft的驱动程序开发工具包,但也可以将其与免费的MinGW工具一起使用。

在Windows中,设备插拔事件的通知会发送到窗口句柄,因此为了接收它们,hidio对象需要自己的(不可见的)窗口,然后该窗口可以接收通知。在当前实现中,对象在接收到这样的通知时自动重建设备列表。此外,如果某个设备当前处于打开状态,它会检查该设备是否仍处于连接状态或已移除状态。

DirectInput

微软的DirectInput API提供了一个相对简单的接口,但以牺牲灵活性为代价。它对USB HID设备类型的支持有限,主要针对最流行的游戏设备;在USB HID语音中,它只支持"通用桌面页面"。它确实提供了对鼠标和键盘数据的访问,但不是作为单独的设备。如果连接了多个鼠标或键盘,那么所有数据都会集中到一个虚拟设备中。它确实支持"力反馈",但不支持任何其他输出类型。与Linux input.h一样,它有自己的简化事件方案,还可以自动缩放一些传入数据,这可能会有问题。

Windows原始输入

RawInput是从WindowsXP开始的一种新的API,它是为了响应开发人员对键盘和鼠标进行原始访问的愿望而提供的。这是从Windows上的鼠标和键盘获取原始数据的唯一方法。使用原始输入,可以获得任何USB HID设备的输入事件,但根本不支持输出。出于这个原因,我们还没有深入研究Raw Input,但我们可能会使用它来完全支持Windows上的键盘和鼠标。

最新更新