读普通硬盘通过ManagementObjectSearcher mc = new ManagementObjectSearcher
("SELECT * FROM Win32_PhysicalMedia"); 
int i = 0;
foreach (ManagementObject mo in mc.Get())
{
if (i++ == Index)
{
if(mo["SerialNumber"]!=null)
{
string a=mo["SerialNumber"].ToString().Trim();
textBox2.Text=a;
break;
}
else
{
textBox2.Text="None";
}
}
是可以的,但是读USB接口的移动硬盘就不行了,mo["SerialNumber"]为空,不知道是怎么回事?
有没有人知道啊?我知道有个软件“U盘检测器V5.0”可以实现这个功能望高手指教!!!

解决方案 »

  1.   

    string deviceId = "";

    ManagementObjectSearcher mc1 = new ManagementObjectSearcher("SELECT * FROM  Win32_DiskDriveToDiskPartition");

    foreach (ManagementObject mo in mc1.Get())
    {
    //System.Console.WriteLine(mo["Dependent"].ToString() + mo["Antecedent"].ToString());
    //Win32_DiskDrive
    using(ManagementObject o1 = new ManagementObject(mo["Antecedent"].ToString()))
    {
    o1.Get(); if(o1["InterfaceType"].ToString().ToUpper() == "USB")
    {
    //Win32_DiskPartition
    using(ManagementObject o2 = new ManagementObject(mo["Dependent"].ToString()))
    {
    o2.Get();
    //System.Console.WriteLine(o["DeviceID"]);
    deviceId = o2["DeviceID"].ToString();
    break;
    }
    }
    }
    } if(deviceId == "")
    {
    System.Console.WriteLine("No USB interface disk has been found.");
    }
    else
    {
    ManagementObjectSearcher mc2 = new ManagementObjectSearcher("SELECT * FROM  Win32_LogicalDiskToPartition");

    foreach (ManagementObject mo in mc2.Get())
    {
    System.Console.WriteLine(mo["Dependent"].ToString() + mo["Antecedent"].ToString());

    //Win32_DiskPartition
    using(ManagementObject o1 = new ManagementObject(mo["Antecedent"].ToString()))
    {
    o1.Get();
    if(o1["DeviceID"].ToString() == deviceId)
    {
    //Win32_LogicalDisk
    using(ManagementObject o2 = new ManagementObject(mo["Dependent"].ToString()))
    {
    o2.Get();
    System.Console.WriteLine("USB drive found:" + o2["DeviceID"]);
    }
                            
    }
    }
    }  

    }