从 C# IntPtr 获取设备信息

Get Device Information from C# IntPtr

Background/Disclaimer: 我目前正在从事一个 C# 项目,该项目需要与 Microsoft 的原始输入进行交互 API。我是一名 C# 开发人员,我对原始输入 API 'space' 和相关 API 完全陌生(即 Windows 表单,user32.dll, Windows 编程)一般。

问题: 由于我的背景,我更喜欢通过 C# 托管包装器库使用原始输入 API;我选择了 SharpDX,但我对其他 C# 解决方案持开放态度。 我已经获得了原始输入,捕获了键盘事件和代表键盘设备的 IntPtr。有没有一种方法可以通过此 IntPtr 参考找到有关设备的更多信息(例如 Guid、产品名称、设备名称等)?

到目前为止做了什么

  1. 通过 EventHandler 委托和 SharpDX 获得原始输入 API;获得设备的 IntPtr。
  2. 这三天,用我平庸的搜索技巧搜索了互联网;找不到从 C# IntPtr 获取设备信息的 C# 管理方式(安全上下文)。

注意: 虽然代码答案很有用,但我不只是为了 "grab-an-answer-and-run"。只要有可能通过一些 C# 管理的免费库或没有 C# 'unsafe' 上下文来做到这一点;向我发送指向所述库的文档的链接和带有一些通用指南的库的主要站点就足够了。

理论上,是的,指针应该是对输入设备句柄的引用,因此您应该能够调用 GetRawInputDeviceInfo 来获取所需的信息。

您必须自己导入此外部函数调用 (from KMoussa's comment),或者在您选择的 C# 托管包装器中导入。