9

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

4

4 回答 4

14
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;
}
于 2010-01-29T13:13:32.823 回答
4

这是对我有用的代码:

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 个文本框来获得结果,你也可以这样做!

和硬盘类:

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#中获取硬盘的序列号

于 2016-07-30T16:48:25.450 回答
2

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

// 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();
}
于 2009-08-30T13:38:03.630 回答
0

嗨刚刚找到这个链接

它对我有用:

在此处输入链接描述

这是代码的基本部分:

  /// <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();
  }
于 2013-06-27T12:19:27.233 回答