2009-07-24 59 views
5

Görsel stüdyo 2005'i kullanarak USB aygıt seri numarasını ve verilerini bir metin dosyasında USB'de okumanın bir yolu var mı?C'deki USB Aygıtı Seri numarasını okuyun C#

+1

http://stackoverflow.com/questions/777569/finding-serial-number-of-usb-drive-without-wmi/777723 –

+0

Lütfen şu bağlantıyı deneyin: http://www.eggheadcafe.com/ makaleleri/20021019.asp –

cevap

11

bu deneyin:

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Management; 

namespace USBDriveSerialNumber { 
    public class USBSerialNumber { 

     string _serialNumber; 
     string _driveLetter; 

     public string getSerialNumberFromDriveLetter(string driveLetter) { 
      this._driveLetter = driveLetter.ToUpper(); 

      if(!this._driveLetter.Contains(":")) { 
       this._driveLetter += ":"; 
      } 

      matchDriveLetterWithSerial(); 

      return this._serialNumber; 
     } 

     private void matchDriveLetterWithSerial() { 

      string[] diskArray; 
      string driveNumber; 
      string driveLetter; 

      ManagementObjectSearcher searcher1 = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDiskToPartition"); 
      foreach (ManagementObject dm in searcher1.Get()) { 
       diskArray = null; 
       driveLetter = getValueInQuotes(dm["Dependent"].ToString()); 
       diskArray = getValueInQuotes(dm["Antecedent"].ToString()).Split(','); 
       driveNumber = diskArray[0].Remove(0, 6).Trim(); 
       if(driveLetter==this._driveLetter){ 
        /* This is where we get the drive serial */ 
        ManagementObjectSearcher disks = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive"); 
        foreach (ManagementObject disk in disks.Get()) { 

         if (disk["Name"].ToString() == ("\\\\.\\PHYSICALDRIVE" + driveNumber) & disk["InterfaceType"].ToString() == "USB") { 
          this._serialNumber = parseSerialFromDeviceID(disk["PNPDeviceID"].ToString()); 
         } 
        } 
       } 
      } 
     } 

     private string parseSerialFromDeviceID(string deviceId) { 
      string[] splitDeviceId = deviceId.Split('\\'); 
      string[] serialArray; 
      string serial; 
      int arrayLen = splitDeviceId.Length-1; 

       serialArray = splitDeviceId[arrayLen].Split('&'); 
       serial = serialArray[0]; 

      return serial; 
     } 

     private string getValueInQuotes(string inValue) { 
      string parsedValue = ""; 

      int posFoundStart = 0; 
      int posFoundEnd = 0; 

      posFoundStart = inValue.IndexOf("\""); 
      posFoundEnd = inValue.IndexOf("\"", posFoundStart + 1); 

      parsedValue = inValue.Substring(posFoundStart + 1, (posFoundEnd - posFoundStart) - 1); 

      return parsedValue; 
     } 

    } 
} 

Kaynak: Eğer çok daha az kod ile bunu yapabilir http://www.cfdan.com/posts/Retrieving_Non-Volatile_USB_Serial_Number_Using_C_Sharp.cfm

+1

Evet, MSDN'e göre, 1.1 çerçevesine kadar geriye doğru kullanılabilir: http://msdn.microsoft.com/en-us/library/system.management.aspx –

0

Veya, burada örnek var

İşte
USBSerialNumber usb = new USBSerialNumber(); 
string serial = usb.getSerialNumberFromDriveLetter("f:\"); 
MessageBox.Show(serial); 

USBSerialNumber sınıf için iç bölümü var :

 string driveletter = "D:"; 

     var index = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDiskToPartition").Get().Cast<ManagementObject>(); 
     var disks = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive").Get().Cast<ManagementObject>(); 
     string serial = ""; 
     try 
     { 
      var drive = (from i in index where i["Dependent"].ToString().Contains(driveletter) select i).FirstOrDefault(); 
      var key = drive["Antecedent"].ToString().Split('#')[1].Split(',')[0]; 

      var disk = (from d in disks 
         where 
          d["Name"].ToString() == "\\\\.\\PHYSICALDRIVE" + key && 
          d["InterfaceType"].ToString() == "USB" 
         select d).FirstOrDefault(); 
      serial = disk["PNPDeviceID"].ToString().Split('\\').Last(); 
     } 
     catch 
     { 
      //drive not found!! 
     } 
     Response.WriteLine(serial); 
0

Matt yanıtı neredeyse doğru, ancak arka harfe dönüşmeden sürücü harfini geçirmeniz gerekir: string string = usb.getSerialNumberFromDriveLetter ("f:");

İlgili konular