在 Windows 8 中使用来自 C# 的原始输入获取 HID 键盘设备

本文关键字:获取 输入 原始 HID 键盘 Windows | 更新日期: 2023-09-27 18:35:10

>我阅读了文章使用来自 C# 的原始输入来处理多个键盘并下载源代码。当我在 Windows 7 中运行它时它可以工作,但在 Windows 8 中运行时失败。

我有"对象引用未设置为对象的实例"错误

string deviceClass = (string)OurKey.GetValue("Class");
if (deviceClass.ToUpper().Equals("KEYBOARD"))

我在string deviceClass放置断点,看到值为 null。如果您查看下载的源代码,则值是从注册表中获取的。Windows 7 和 Windows 8 之间是否有任何区别来获取此值?我该如何解决这个问题?

在 Windows 8 中使用来自 C# 的原始输入获取 HID 键盘设备

该代码期望在适当的HKEY_LOCAL_MACHINE'SYSTEM'CurrentControlSet'Enum'HID'键中存在一个Class值,在我的 Windows 8 机器上,没有一个条目具有此键,因此您将获得所描述的行为。

即使密钥确实存在,这也是获取类的糟糕方法;相反,设备类的 p/invoke GetRawInputDeviceInfo()

这是

由于 Windows 8 及更高版本中不再使用 Class REG_SZ 值。

您可以改用"服务"值,但请确保搜索相应的数据 kbdhid

string deviceClass = (string)OurKey.GetValue("Service");
if (deviceClass.Equals("kbdhid"))