如何使用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(); }