我可以使用devcon.exe
并列出所有可用的类:
C:devcon classes
Listing 111 setup classes.
XboxComposite : Xbox Peripherals
RemotePosDevice : POS Remote Device
DigitalMediaDevices : Digital Media Devices
PrintQueue : Print queues
…
因此,我可以看到有111个设置类。但是,当我查询Win32_PnPEntity
:时
var query = new ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity");
var results = query.Get();
var set = new HashSet<string>();
foreach(var device in results)
{
var className = (string)device.GetPropertyValue("PNPClass");
set.Add(className)
}
var count = set.Count; // 25 <---- not 111
我得了25分,不是111分。因此,我的查询显然是机器实际可用内容的子集,这是有意义的。从devcon classes
输出的类与PNPClass
属性值一致,所以我认为它们是相同的。
因此,必须有一种方法来获取所有可用的PNPClass
,除非devcon.exe
只是硬编码它用devcon classes
输出的列表
我想通过编程自己生成这个列表,而不是调用devcon classes
作为子流程并解析它的输出。
不幸的是,Win32_PNPEntity并没有准确地映射到您将从devcon获得的数据。Devcon为您提供系统上所有可用的类,包括system、filter、PNP等。Win32_PNPEntity只是即插即用设备。Win32_PNPEntity数据还取决于当前连接的硬件。
devcon正在从"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class"中的子项输出所有数据,其中没有名为NoUseClass=1的名称/值。它显示Class和ClassDesc值。ClassDesc值可以是文本字符串、对.inf中某个值的引用或dll中的引用,因此输出该信息需要一些工作。
你想用这些数据做什么?也许还有其他方法可以获得你需要的信息?如果你只是想获得连接的PNP设备的类信息,那么你现有的代码应该会获得你需要的信息。