C# 如何获取硬盘序列号

C# 如何获取硬盘序列号,c#,.net,C#,.net,可能是标题重复。在没有连接USB设备的情况下,我正在成功获取笔记本电脑序列号的HDD。但是,当连接任何USB时,该代码会获取所连接设备的序列号。我只想要笔记本电脑或台式电脑的硬盘序列号,即使连接了USB 下面是代码 using System.Management; namespace SystemInfo { public class Info1 { public static String GetHDDSerialNo() {

可能是标题重复。在没有连接USB设备的情况下,我正在成功获取笔记本电脑序列号的HDD。但是,当连接任何USB时,该代码会获取所连接设备的序列号。我只想要笔记本电脑或台式电脑的硬盘序列号,即使连接了USB

下面是代码

using System.Management;

namespace SystemInfo
{
    public class Info1
    {
        public static String GetHDDSerialNo()
        {
            ManagementClass mangnmt = new ManagementClass("Win32_LogicalDisk");
            ManagementObjectCollection mcol = mangnmt.GetInstances();
            string result = "";

            foreach (ManagementObject strt in mcol)
            {
                result += Convert.ToString(strt["VolumeSerialNumber"]);
            }

            return result;
        }
    }
}
试试这个

 ManagementObjectSearcher theSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE InterfaceType='USB'");
        foreach (ManagementObject currentObject in theSearcher.Get())
        {
            ManagementObject theSerialNumberObjectQuery = new ManagementObject("Win32_PhysicalMedia.Tag='" + currentObject["DeviceID"] + "'");
            MessageBox.Show(theSerialNumberObjectQuery["SerialNumber"].ToString());
        }

您可以使用WMI
Win32\u DiskDrive
,在包含“fixed”的
MediaType
上进行筛选,并获取
SerialNumber

比如:

public static String GetHDDSerialNo()
{
    ManagementClass mangnmt = new ManagementClass("Win32_DiskDrive");
    ManagementObjectCollection mcol = mangnmt.GetInstances();
    string result = "";

    foreach (ManagementObject strt in mcol)
    {
        if (Convert.ToString(strt["MediaType"]).ToUpper().Contains("FIXED"))
        {
            result += Convert.ToString(strt["SerialNumber"]);
        }
    }

    return result;
}
媒体类型可以包含“外部”、“可移动”、“固定”。确切的字符串取决于操作系统。在Seven和XP上,
字符串可以不同。这就是为什么我们使用
包含


您指的是带有“任何USB连接时”的USB-HDD还是任何USB设备?任何USB设备。甚至互联网USB加密狗。如果有多个硬盘呢?还是没有硬盘?那你想得到什么?我想你没有抓住重点。这不是你有多少硬盘的问题。问题是如何获取电脑硬盘的序列号。阅读问题,我说的是代码给了我连接设备的序列号,而不是硬盘的序列号。它没有显示任何内容。还有一件事,我想得到笔记本电脑或台式机的硬盘序列号,而不是连接到它们的设备。