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

如何在不使用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; ///  /// method to retrieve the selected HDD's serial number ///  /// Drive letter to retrieve serial number for /// the HDD's serial number 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是代码的重要组成部分:

  ///  /// return Volume Serial Number from hard drive ///  /// [optional] Drive letter /// [string] VolumeSerialNumber 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(); }