我阅读了文章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之间有什么区别来获取此值吗?我该如何解决这个问题?
答案 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"))