繁体   English   中英

如何使用C#获取硬盘序列号?

[英]How do I use C# to get the Hard-disk serial number?

我如何不使用dll并获得VISTA支持的硬盘序列号

using System.Management;

public string GetHDDSerial()
{
    ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");

    foreach (ManagementObject wmi_HD in searcher.Get())
    {
        // get the hardware serial no.
        if (wmi_HD["SerialNumber"] != null)
            return wmi_HD["SerialNumber"].ToString();
    }

    return string.Empty;
}

这是适合我的代码:

ManagementObjectSearcher searcher = null;
 searcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");

 foreach (ManagementObject wmi_HD in searcher.Get())
 {
     HardDrive hd = new HardDrive();

     try
     {  
         txtmdl.Text = hd.Caption = wmi_HD["Caption"].ToString();
         txtsn.Text=(hd.SerialNo = wmi_HD.GetPropertyValue("SerialNumber").ToString());

我刚刚添加了2个textBox来获取结果,您可以做同样的事情!

和硬盘驱动器类:

public class HardDrive
        {
            public string Model { get; set; }
            public string InterfaceType { get; set; }
            public string Caption { get; set; }
            public string SerialNo { get; set; }
        }

不要忘记使用:

using System.Management;

来源: 获取c#中的硬盘序列号

这里尝试这段代码,让我们知道它是否有效:

// Namespace Reference
using System.Management;

/// <summary>
/// method to retrieve the selected HDD's serial number
/// </summary>
/// <param name="strDriveLetter">Drive letter to retrieve serial number for</param>
/// <returns>the HDD's serial number</returns>
public string GetHDDSerialNumber(string drive)
{
    //check to see if the user provided a drive letter
    //if not default it to "C"
    if (drive == "" || drive == null)
    {
        drive = "C";
    }
    //create our ManagementObject, passing it the drive letter to the
    //DevideID using WQL
    ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"" + drive +":\"");
    //bind our management object
    disk.Get();
    //return the serial number
    return disk["VolumeSerialNumber"].ToString();
}

编辑:如果不起作用,请从CodeProject尝试以下代码:

首先,让我们创建一个类来存储有关硬盘驱动器的信息:

class HardDrive
{
 private string model = null;
 private string type = null;
 private string serialNo = null; 
 public string Model
 {
  get {return model;}
  set {model = value;}
 } 
 public string Type
 {
  get {return type;}
  set {type = value;}
 } 
 public string SerialNo
 {
  get {return serialNo;}
  set {serialNo = value;}
 }
}

接下来,我们查询Win32_DiskDrive类:

ManagementObjectSearcher searcher = new
 ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");

foreach(ManagementObject wmi_HD in searcher.Get())
{
 HardDrive hd = new HardDrive();
 hd.Model = wmi_HD["Model"].ToString();
 hd.Type  = wmi_HD["InterfaceType"].ToString();
 hdCollection.Add(hd);
}

现在我们需要从Win32_PhysicalMedia类中提取序列号:

searcher = new
 ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");

int i = 0;
foreach(ManagementObject wmi_HD in searcher.Get())
{
 // get the hard drive from collection
 // using index
 HardDrive hd = (HardDrive)hdCollection[i];

 // get the hardware serial no.
 if (wmi_HD["SerialNumber"] == null)
  hd.SerialNo = "None";
 else
  hd.SerialNo = wmi_HD["SerialNumber"].ToString();

 ++i;
}

现在,我们显示硬盘驱动器的信息:

// Display available hard drives
foreach(HardDrive hd in hdCollection)
{
 Console.WriteLine("Model\t\t: " + hd.Model);
 Console.WriteLine("Type\t\t: " + hd.Type);
 Console.WriteLine("Serial No.\t: " + hd.SerialNo);
 Console.WriteLine();
}

嗨,刚找到此链接

它为我工作:

在此处输入链接说明

Herre是代码的基本部分:

  /// <summary>
  /// return Volume Serial Number from hard drive
  /// </summary>
  /// <param name="strDriveLetter">[optional] Drive letter</param>
  /// <returns>[string] VolumeSerialNumber</returns>
  public string GetVolumeSerial(string strDriveLetter)
  {
      if( strDriveLetter=="" || strDriveLetter==null) 
          strDriveLetter="C";
     ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"" + strDriveLetter +":\"");
     disk.Get();
     return disk["VolumeSerialNumber"].ToString();
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM