读取Windows 7/8中的设备pipe理器的属性字段

我正在开发一个Windows应用程序,它提供了字段详细信息 – > X.

其中X是 – >

右键单击我的电脑>

Properties > Device Manager > (select any Item - Say KeyBoard) > Click it > standard PS/2 KeyBoard > double Click standard PS/2 KeyBoard > click the Details Tab > 

在财产下有各种领域,如显示名称,问题代码,家长兄弟姐妹等,等等?

我想要得到他们的价值。 我可以使用哪个Windows API。 我这样做的Windows 7以及Windows 8.我希望API将保持不变。另外我有64位机器。 对于我想从“设备pipe理器”中了解详细信息的任何设备,都必须如此。

而且我只是想要所有的操作 – 阅读和没有设置(写),所以我认为我不会有任何问题违反pipe理Rights.PLeasebuild议。 我添加了快照以供参考!例如,我想知道HID USB抱怨鼠标(D0(活动)或D2(睡眠))的当前状态。

显示HID兼容鼠标的Powerdata字段的图像

图像显示HID投诉鼠标的电源状态,即D0  - 活动

我需要得到这个电源状态D0。

使用ManagementObjectCollection获取硬件信息非常容易。

例如从PC处理器获取所有属性和值

 var win32DeviceClassName = "win32_processor"; var query = string.Format("select * from {0}", win32DeviceClassName); using (var searcher = new ManagementObjectSearcher(query)) { ManagementObjectCollection objectCollection = searcher.Get(); foreach (ManagementBaseObject managementBaseObject in objectCollection) { foreach (PropertyData propertyData in managementBaseObject.Properties) { Console.WriteLine("Property: {0}, Value: {1}", propertyData.Name, propertyData.Value); } } } 

WIN32类名的完整列表可在http://msdn.microsoft.com/en-us/library/aa394084%28v=VS.85%29.aspx

干杯。

这个问题是用C#标记的,但实际的问题是要求任何Window API。 使用Win32 API可以使用SetupDiGetDeviceRegistryProperty()来检索信息。 步骤是:

  1. 通过SetupDiGetClassDevs()获取您感兴趣的设备的设备信息。
  2. 通过SetupDiEnumDeviceInfo()遍历设备信息。
  3. 通过调用SetupDiGetDeviceRegistryProperty()获取属性。
  4. 销毁通过SetupDiDestroyDeviceInfoList()设置的设备信息。

根据文档,该API在Windows 2000和更高版本上可用。

你将有最简单的时间(我认为)与PowerShell这样做。 如果您正在编写一些C#代码,则可以使用System.Management.Automation命名空间中的类型(例如PowerShell)执行PS脚本(链接: http : //msdn.microsoft.com/zh-cn/library/system.management。 automation.powershell(v = vs.85).aspx ),但我会开始使用PS控制台进行测试。

您应该首先(使用PowerShell)使用此命令浏览环境中的WMI对象

 Get-WmiObject -List -namespace root\CIMV2 

然后,一旦你确定你正在寻找的类,你可以使用这个命令检索该类的详细信息:

 Get-WmiObject -namespace root\CIMV2 -class Win32_USBControllerDevice 

一旦你有了这些内容,你就不得不分析文本。

更新:尝试使用此命令获得您的PC上的鼠标驱动程序的“状态”,“状态”和“开始”属性:

 gwmi Win32_SystemDriver | where {$_.DisplayName -like "*Mouse*"}