如何获取硬盘序列号

时间:2014-04-18 06:32:50

标签: c# .net

可能是标题重复。当没有连接USB设备时,我成功获得笔记本电脑序列号的硬盘。但是当连接任何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;
        }
    }
}

2 个答案:

答案 0 :(得分:0)

试试这个

 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());
        }

答案 1 :(得分:0)

您可以使用WMI Win32_DiskDrive,对包含“已修复”的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上,String可以是不同的。这就是我们使用Contains

的原因

little reading