在C++中确定HID接口是POS还是键盘;

发布于 2024-08-18 14:33:41 字数 179 浏览 11 评论 0原文

我有一些条形码扫描仪设备可以处理各种 USB 接口(COMM 仿真、HID 键盘、HID POS 等)。问题是,虽然我可以判断设备是否处于 HID 模式,但我需要能够确定它是 HID 键盘还是 HID POS。

有没有办法使用 Win32 C++ 来确定这一点,最好使用内置的 Windows HID 库 (hidsdi.h)?

I've got some bar code scanner devices that can handle a variety of USB interfaces (COMM Emulation, HID Keyboard, HID POS, etc.) The problem is that, while I can tell if the device is in a HID mode, I need to be able to determine if it's HID Keyboard or HID POS.

Is there a way to determine this using Win32 C++, preferably with the built in windows HID library (hidsdi.h)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

幻想少年梦 2024-08-25 14:33:41

您可以使用 HidD_GetHidGuid 获取设备的唯一 GUID。设备接口指南由每个设备/应用程序软件供应商、Microsoft 或第三方根据他们认为合适的方式定义。在某些情况下,指南是已发布的公共知识,并且是标准接口,在某些情况下则不是。

您还可以使用 Microsoft 的 USBView 实用程序,它可以让您浏览 USB 树或您可以查看注册表,看看是否可以找到您设备的 GUID。如果配置数据不存在或者除了通用设备之外没有显示自身(如果您的设备支持此功能),您可能仍然需要查询您的设备来确定设备类型。

GUID 有两种类型:设备类和设备接口。一个设备只能是一个类的一部分。不幸的是,设备类和设备接口 GUID 有时是相同的,从而使开发人员感到困惑。在 WinXP DDK 中,创建了标准来尝试使 GUID 的定义不那么混乱。

另请参阅之前的 SO 问题:对所有 USB 设备使用 RegisterDeviceNotification()。

You can use HidD_GetHidGuid to get the unique GUID for the device. Device interface guids are defined by each device/application software vendor, Microsoft or third party as they see fit. In some cases the guids are published and public knowledge and are standard interfaces, in some cases they are not.

You can also use the USBView utility from Microsoft which will let you browse the USB tree or you can look in the registry and see if you can find the GUID for your device. You may still have to query your device to determine device type if the config data is not present or it does not reveal itself other than a generic device, if your device supports this.

There are two types of GUIDs: Device Class and Device Interface. A device can only be a part of one class. Unfortunately, the Device Class and Device Interface GUIDs are sometimes the same, thus confusing developers. In the WinXP DDK, standards were created to try and make the definition of GUIDs less confusing.

See also this previous SO question: Use RegisterDeviceNotification() for ALL USB devices.

匿名。 2024-08-25 14:33:41

以下是可能的 HID 指南的列表: http://msdn.microsoft.com /en-us/library/ms791134.aspx 并按照 Roboto 建议使用 HidD_GetHidGuid

Here is a list of possible HID Guids: http://msdn.microsoft.com/en-us/library/ms791134.aspx and use HidD_GetHidGuid as Roboto suggested

离不开的别离 2024-08-25 14:33:41

您需要使用 HidP_ 函数来检查 hid 报告功能。找出 HIDPOS 设备提供的功能(用途),并使用 HidD_GetPreparsedData()、HidP_GetCaps() 和 HidP_GetValueCaps(和/或 ..ButtonCaps 等)检查是否存在这些用途。 Jan Axelson 的页面是查找示例的好地方。如果存在使用情况,则您已拥有 POS 设备。如果不是,那么它一定是键盘的问题(假设您已确认设备已连接。)

You'll need to use the HidP_ functions to check the hid report capabilities. Find out what capabilities (usages) are presented by the HIDPOS device, and check if those usages are present using HidD_GetPreparsedData(), HidP_GetCaps() and then HidP_GetValueCaps(and/or ..ButtonCaps, etc). A good place to look for examples is Jan Axelson's page. If the usages are present, then you've got the POS device. If not, then it must be the keyboard (assuming you've confirmed the device is attached.)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文