C# 如何获取设备管理器里面的所有详细信息,特别是“父系”

时间:2022-11-02 10:39:47
如题,win7系统里面的设备管理器里的详细信息,其实是想知道某个USB口连接的安卓设备的序列号,通过查看Android Device --> Android Composite ADB Interface 的详细信息,找到“父系”属性,值包含了设备的序列号。找了很多方法,都没有包含这个,请帮忙看看,谢谢。
C# 如何获取设备管理器里面的所有详细信息,特别是“父系”

13 个解决方案

#2


http://download.csdn.net/download/tonysungood000/10132587

你可以查查

#3


引用 1 楼 From_* 的回复:
https://*.com/questions/3331043/get-list-of-connected-usb-devices


通过文章的方法,的确能获取到这个序列号了,即PNPDeviceID ,但是只是部分内容,获取到完整的详细信息列表,才能做一一对应。

#4


引用 2 楼 tonysungood000 的回复:
http://download.csdn.net/download/tonysungood000/10132587

你可以查查


谢谢你的工具,获取到的东西相对较全,但是有个问题就是,工具获取到的USB设备的HardwareID信息不全,例如,从设备管理器里面获取到的是USB\VID_05C6&PID_90B8&REV_0409&MI_04,但是工具里面的获取的是USB\VID_05C6&PID_90B8&REV_0409,少了最后一截。

#5


http://blog.csdn.net/zhoufoxcn/article/details/2044246

LZ可以看看这个,用wbemtest.exe找到你要查找的的属性,在代码中编写具体的 wql 查询 

#6


引用 4 楼 sasa3302 的回复:
Quote: 引用 2 楼 tonysungood000 的回复:

http://download.csdn.net/download/tonysungood000/10132587

你可以查查


谢谢你的工具,获取到的东西相对较全,但是有个问题就是,工具获取到的USB设备的HardwareID信息不全,例如,从设备管理器里面获取到的是USB\VID_05C6&PID_90B8&REV_0409&MI_04,但是工具里面的获取的是USB\VID_05C6&PID_90B8&REV_0409,少了最后一截。


设备管理器中的有些信息是多个子信息的组合

#7


引用 5 楼 holkie 的回复:
http://blog.csdn.net/zhoufoxcn/article/details/2044246

LZ可以看看这个,用wbemtest.exe找到你要查找的的属性,在代码中编写具体的 wql 查询 

C# 如何获取设备管理器里面的所有详细信息,特别是“父系”      C# 如何获取设备管理器里面的所有详细信息,特别是“父系”

#8


引用 7 楼 holkie 的回复:
Quote: 引用 5 楼 holkie 的回复:

http://blog.csdn.net/zhoufoxcn/article/details/2044246

LZ可以看看这个,用wbemtest.exe找到你要查找的的属性,在代码中编写具体的 wql 查询 

C# 如何获取设备管理器里面的所有详细信息,特别是“父系”      C# 如何获取设备管理器里面的所有详细信息,特别是“父系”


这个工具和2楼的兄弟的工具类似的,谢谢

#9


引用 8 楼 sasa3302 的回复:
Quote: 引用 7 楼 holkie 的回复:

Quote: 引用 5 楼 holkie 的回复:

http://blog.csdn.net/zhoufoxcn/article/details/2044246

LZ可以看看这个,用wbemtest.exe找到你要查找的的属性,在代码中编写具体的 wql 查询 

C# 如何获取设备管理器里面的所有详细信息,特别是“父系”      C# 如何获取设备管理器里面的所有详细信息,特别是“父系”


这个工具和2楼的兄弟的工具类似的,谢谢


这是Windows系统自带的,在运行里输入wbemtest就行了,先用这个查一下你要查看的信息包含在哪个属性,然后代码实现。

例如这个查端口的函数:

/// WMI取硬件信息
        /// </summary>
        /// <param name="hardType"></param>
        /// <param name="propKey"></param>
        /// <returns></returns>
        public static string[] MulGetHardwareInfo(HardwareEnum hardType, string propKey)
        {

            List<string> strs = new List<string>();
            try
            {
                using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from " + hardType))
                {
                    var hardInfos = searcher.Get();
                    foreach (var hardInfo in hardInfos)
                    {
                        if (hardInfo.Properties[propKey].Value.ToString().Contains("COM"))
                        {
                            strs.Add(hardInfo.Properties[propKey].Value.ToString());
                        }

                    }
                    searcher.Dispose();
                }
                return strs.ToArray();
            }
            catch
            {
                return null;
            }
            finally
            { strs = null; }
        }
     //通过WMI获取COM端口
                string[] ss = MulGetHardwareInfo(HardwareEnum.Win32_PnPEntity, "Name");

#10


引用 9 楼 holkie 的回复:
Quote: 引用 8 楼 sasa3302 的回复:

Quote: 引用 7 楼 holkie 的回复:

Quote: 引用 5 楼 holkie 的回复:

http://blog.csdn.net/zhoufoxcn/article/details/2044246

LZ可以看看这个,用wbemtest.exe找到你要查找的的属性,在代码中编写具体的 wql 查询 

C# 如何获取设备管理器里面的所有详细信息,特别是“父系”      C# 如何获取设备管理器里面的所有详细信息,特别是“父系”


这个工具和2楼的兄弟的工具类似的,谢谢


这是Windows系统自带的,在运行里输入wbemtest就行了,先用这个查一下你要查看的信息包含在哪个属性,然后代码实现。

例如这个查端口的函数:

/// WMI取硬件信息
        /// </summary>
        /// <param name="hardType"></param>
        /// <param name="propKey"></param>
        /// <returns></returns>
        public static string[] MulGetHardwareInfo(HardwareEnum hardType, string propKey)
        {

            List<string> strs = new List<string>();
            try
            {
                using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from " + hardType))
                {
                    var hardInfos = searcher.Get();
                    foreach (var hardInfo in hardInfos)
                    {
                        if (hardInfo.Properties[propKey].Value.ToString().Contains("COM"))
                        {
                            strs.Add(hardInfo.Properties[propKey].Value.ToString());
                        }

                    }
                    searcher.Dispose();
                }
                return strs.ToArray();
            }
            catch
            {
                return null;
            }
            finally
            { strs = null; }
        }
     //通过WMI获取COM端口
                string[] ss = MulGetHardwareInfo(HardwareEnum.Win32_PnPEntity, "Name");


/// <param name="hardType"></param>
        /// <param name="propKey"></param>

hardType和propKey是什么呢

#11


hardType 就是枚举类,例如 Win32_PnPEntity,Win32_PnPDevice 等等,
propKey就是包含设备信息的属性段
C# 如何获取设备管理器里面的所有详细信息,特别是“父系”

#12


引用 11 楼 holkie 的回复:
hardType 就是枚举类,例如 Win32_PnPEntity,Win32_PnPDevice 等等,
propKey就是包含设备信息的属性段
C# 如何获取设备管理器里面的所有详细信息,特别是“父系”


摸索了一下,感觉就只有Win32_PnPEntity能够查询到,如果查询Win32_PnPDevice会报错
C# 如何获取设备管理器里面的所有详细信息,特别是“父系”

#13


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;

namespace ConsoleApplication2
{
    class Program
    {
        public static string[] MulGetHardwareInfo(string hardType, string propKey)
        {

            List<string> strs = new List<string>();
            try
            {
                using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from " + hardType))
                {
                    var hardInfos = searcher.Get();
                    foreach (var hardInfo in hardInfos)
                    {                       
                        strs.Add(hardInfo.Properties[propKey].Value.ToString());
                    }
                    searcher.Dispose();
                }
                return strs.ToArray();
            }
            catch
            {
                return null;
            }
            finally
            { strs = null; }
        }
        static void Main(string[] args)
        {
            string[] ss = MulGetHardwareInfo("Win32_USBHub", "DeviceID");
            for (int i = 0; i < ss.Length; i++)
            {
                Console.WriteLine(ss[i]);
            }
        }
    }
}


C# 如何获取设备管理器里面的所有详细信息,特别是“父系”

#1


#2


http://download.csdn.net/download/tonysungood000/10132587

你可以查查

#3


引用 1 楼 From_* 的回复:
https://*.com/questions/3331043/get-list-of-connected-usb-devices


通过文章的方法,的确能获取到这个序列号了,即PNPDeviceID ,但是只是部分内容,获取到完整的详细信息列表,才能做一一对应。

#4


引用 2 楼 tonysungood000 的回复:
http://download.csdn.net/download/tonysungood000/10132587

你可以查查


谢谢你的工具,获取到的东西相对较全,但是有个问题就是,工具获取到的USB设备的HardwareID信息不全,例如,从设备管理器里面获取到的是USB\VID_05C6&PID_90B8&REV_0409&MI_04,但是工具里面的获取的是USB\VID_05C6&PID_90B8&REV_0409,少了最后一截。

#5


http://blog.csdn.net/zhoufoxcn/article/details/2044246

LZ可以看看这个,用wbemtest.exe找到你要查找的的属性,在代码中编写具体的 wql 查询 

#6


引用 4 楼 sasa3302 的回复:
Quote: 引用 2 楼 tonysungood000 的回复:

http://download.csdn.net/download/tonysungood000/10132587

你可以查查


谢谢你的工具,获取到的东西相对较全,但是有个问题就是,工具获取到的USB设备的HardwareID信息不全,例如,从设备管理器里面获取到的是USB\VID_05C6&PID_90B8&REV_0409&MI_04,但是工具里面的获取的是USB\VID_05C6&PID_90B8&REV_0409,少了最后一截。


设备管理器中的有些信息是多个子信息的组合

#7


引用 5 楼 holkie 的回复:
http://blog.csdn.net/zhoufoxcn/article/details/2044246

LZ可以看看这个,用wbemtest.exe找到你要查找的的属性,在代码中编写具体的 wql 查询 

C# 如何获取设备管理器里面的所有详细信息,特别是“父系”      C# 如何获取设备管理器里面的所有详细信息,特别是“父系”

#8


引用 7 楼 holkie 的回复:
Quote: 引用 5 楼 holkie 的回复:

http://blog.csdn.net/zhoufoxcn/article/details/2044246

LZ可以看看这个,用wbemtest.exe找到你要查找的的属性,在代码中编写具体的 wql 查询 

C# 如何获取设备管理器里面的所有详细信息,特别是“父系”      C# 如何获取设备管理器里面的所有详细信息,特别是“父系”


这个工具和2楼的兄弟的工具类似的,谢谢

#9


引用 8 楼 sasa3302 的回复:
Quote: 引用 7 楼 holkie 的回复:

Quote: 引用 5 楼 holkie 的回复:

http://blog.csdn.net/zhoufoxcn/article/details/2044246

LZ可以看看这个,用wbemtest.exe找到你要查找的的属性,在代码中编写具体的 wql 查询 

C# 如何获取设备管理器里面的所有详细信息,特别是“父系”      C# 如何获取设备管理器里面的所有详细信息,特别是“父系”


这个工具和2楼的兄弟的工具类似的,谢谢


这是Windows系统自带的,在运行里输入wbemtest就行了,先用这个查一下你要查看的信息包含在哪个属性,然后代码实现。

例如这个查端口的函数:

/// WMI取硬件信息
        /// </summary>
        /// <param name="hardType"></param>
        /// <param name="propKey"></param>
        /// <returns></returns>
        public static string[] MulGetHardwareInfo(HardwareEnum hardType, string propKey)
        {

            List<string> strs = new List<string>();
            try
            {
                using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from " + hardType))
                {
                    var hardInfos = searcher.Get();
                    foreach (var hardInfo in hardInfos)
                    {
                        if (hardInfo.Properties[propKey].Value.ToString().Contains("COM"))
                        {
                            strs.Add(hardInfo.Properties[propKey].Value.ToString());
                        }

                    }
                    searcher.Dispose();
                }
                return strs.ToArray();
            }
            catch
            {
                return null;
            }
            finally
            { strs = null; }
        }
     //通过WMI获取COM端口
                string[] ss = MulGetHardwareInfo(HardwareEnum.Win32_PnPEntity, "Name");

#10


引用 9 楼 holkie 的回复:
Quote: 引用 8 楼 sasa3302 的回复:

Quote: 引用 7 楼 holkie 的回复:

Quote: 引用 5 楼 holkie 的回复:

http://blog.csdn.net/zhoufoxcn/article/details/2044246

LZ可以看看这个,用wbemtest.exe找到你要查找的的属性,在代码中编写具体的 wql 查询 

C# 如何获取设备管理器里面的所有详细信息,特别是“父系”      C# 如何获取设备管理器里面的所有详细信息,特别是“父系”


这个工具和2楼的兄弟的工具类似的,谢谢


这是Windows系统自带的,在运行里输入wbemtest就行了,先用这个查一下你要查看的信息包含在哪个属性,然后代码实现。

例如这个查端口的函数:

/// WMI取硬件信息
        /// </summary>
        /// <param name="hardType"></param>
        /// <param name="propKey"></param>
        /// <returns></returns>
        public static string[] MulGetHardwareInfo(HardwareEnum hardType, string propKey)
        {

            List<string> strs = new List<string>();
            try
            {
                using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from " + hardType))
                {
                    var hardInfos = searcher.Get();
                    foreach (var hardInfo in hardInfos)
                    {
                        if (hardInfo.Properties[propKey].Value.ToString().Contains("COM"))
                        {
                            strs.Add(hardInfo.Properties[propKey].Value.ToString());
                        }

                    }
                    searcher.Dispose();
                }
                return strs.ToArray();
            }
            catch
            {
                return null;
            }
            finally
            { strs = null; }
        }
     //通过WMI获取COM端口
                string[] ss = MulGetHardwareInfo(HardwareEnum.Win32_PnPEntity, "Name");


/// <param name="hardType"></param>
        /// <param name="propKey"></param>

hardType和propKey是什么呢

#11


hardType 就是枚举类,例如 Win32_PnPEntity,Win32_PnPDevice 等等,
propKey就是包含设备信息的属性段
C# 如何获取设备管理器里面的所有详细信息,特别是“父系”

#12


引用 11 楼 holkie 的回复:
hardType 就是枚举类,例如 Win32_PnPEntity,Win32_PnPDevice 等等,
propKey就是包含设备信息的属性段
C# 如何获取设备管理器里面的所有详细信息,特别是“父系”


摸索了一下,感觉就只有Win32_PnPEntity能够查询到,如果查询Win32_PnPDevice会报错
C# 如何获取设备管理器里面的所有详细信息,特别是“父系”

#13


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;

namespace ConsoleApplication2
{
    class Program
    {
        public static string[] MulGetHardwareInfo(string hardType, string propKey)
        {

            List<string> strs = new List<string>();
            try
            {
                using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from " + hardType))
                {
                    var hardInfos = searcher.Get();
                    foreach (var hardInfo in hardInfos)
                    {                       
                        strs.Add(hardInfo.Properties[propKey].Value.ToString());
                    }
                    searcher.Dispose();
                }
                return strs.ToArray();
            }
            catch
            {
                return null;
            }
            finally
            { strs = null; }
        }
        static void Main(string[] args)
        {
            string[] ss = MulGetHardwareInfo("Win32_USBHub", "DeviceID");
            for (int i = 0; i < ss.Length; i++)
            {
                Console.WriteLine(ss[i]);
            }
        }
    }
}


C# 如何获取设备管理器里面的所有详细信息,特别是“父系”