6

我正在开发一个提供字段详细信息的 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 位机器。对于我想从设备管理器了解其详细信息的任何设备,这必须是正确的。

另外,我只想进行所有操作-读取和不设置(写入),所以我认为违反管理员权限不会有任何问题。请建议。!我添加了快照以供参考!例如,我想知道 HID USB 投诉鼠标的当前状态(D0(活动)或 D2(睡眠))。

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

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

我需要获取此电源状态 D0。

4

3 回答 3

3

The question is tagged with C#, though the actual question asks for any Window API. With the Win32 API the information can be retrieved with SetupDiGetDeviceRegistryProperty(). The steps would be:

  1. Get a device info set for the devices you're interested in via SetupDiGetClassDevs().
  2. Iterate through the device infos via SetupDiEnumDeviceInfo().
  3. Get the properties via calls to SetupDiGetDeviceRegistryProperty().
  4. Destroy the device info set via SetupDiDestroyDeviceInfoList().

According to the documentation the API is available on Windows 2000 and later.

于 2014-06-25T15:25:24.250 回答
3

It's quite easy to get the hardware information using ManagementObjectCollection.

For instance to get all properties and values from the PC processor

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);
                    }
                }



            }

The full list of WIN32 class name is available at http://msdn.microsoft.com/en-us/library/aa394084%28v=VS.85%29.aspx

Cheers.

于 2013-03-05T05:05:50.103 回答
1

使用 PowerShell 执行此操作将是最轻松的时间(我认为)。如果您正在编写一些 C# 代码,您可以使用 System.Management.Automation 命名空间中的类型执行 PS 脚本,例如 PowerShell(链接:http: //msdn.microsoft.com/en-us/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*"}
于 2013-03-03T04:19:19.727 回答