2009-08-30 12 views

Odpowiedz

2

Spróbuj kod z here i daj nam znać, czy to działa:

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

EDIT: A jeśli to nie robi praca, spróbuj tego kodu z CodeProject:

Najpierw stwórzmy klasy do przechowywania informacji o dysku twardym:

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

Następnie, kwerendy Win32_DiskDrive Klasa:

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

Teraz musimy wyodrębnić numer seryjny z klasy 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; 
} 

Teraz wyświetlania informacji naszego dysku twardego:

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

Tak, zgadzam się ... WMI. –

+0

Dobry pomysł dla mnie –

0

Cześć Właśnie znalazłem ten link

pracował dla mnie:

enter link description here

Herre jest istotną częścią kodu:

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

tutaj jest kod, który działa dla mnie:

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

Właśnie dodałem 2 tekstowym, aby uzyskać wyniki ,, można zrobić to samo!

i dysk twardy klasy:

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

Nie zapomnij użyć:

using System.Management; 

Źródło: get serial number of hard disk in c#

Powiązane problemy