我可以使用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
作为子进程调用并解析其输出。
答案 0 :(得分:0)
不幸的是,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设备的类信息,那么您现有的代码应会获取所需的信息。