代码之家  ›  专栏  ›  技术社区  ›  AJ Venturella

如何从WMI获取所有可用的pnpclass名称

  •  0
  • AJ Venturella  · 技术社区  · 6 年前

    我可以用 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 属性值,所以我假设它们是相同的。

    所以一定有办法把所有可用的 PNP-类 除非 德维康 只是列出它输出的硬编码 DEVCON类

    我希望自己以编程方式生成此列表,而不是调用 DEVCON类 作为子进程并分析其输出。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Paul G    6 年前

    不幸的是,win32并不完全映射到从devcon获得的数据。devcon为您提供系统上所有可用的类,包括system、filter、pnp等。win32_ppenty只是即插即用设备。win32_ppenty数据还取决于当前连接的硬件。

    devcon正在输出“hkey_local_machine\system\currentcontrolset\control\class”子项中的所有数据,其中没有名/值称为nousClass=1。它显示类和ClassDesc值。ClassDesc值可以是文本字符串、对.inf中的值的引用,也可以是对dll的引用,因此输出该信息需要一些工作。

    你想用这些数据做什么?也许还有其他方法可以得到你需要的信息?如果您只是想获取已连接的PNP设备的类信息,那么您现有的代码应该会获得您需要的信息。