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

时间:2014-12-24 17:19:22

标签: c# barcode-scanner

我阅读了文章Using Raw Input from C# to handle multiple keyboards并下载了source。它在Windows 7中运行时有效,但在Windows 8中运行时失败。

我有“对象引用未设置为对象的实例。”错误

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

我将断点放在string deviceClass并看到值为null。如果查看下载的源,则从注册表获取值。 Windows 7和Windows 8之间有什么区别来获取此值吗?我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

该代码需要Class值存在于相应的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\HID\密钥中,在我的Windows 8计算机上,没有任何条目具有此密钥,因此您将获得您描述的行为。

即使密钥确实存在,这也是一种很难获得课程的方法;而是为设备类p / invoke GetRawInputDeviceInfo()

答案 1 :(得分:0)

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

您可以使用服务值,但请务必搜索相应的数据 kbdhid

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