我想获得硬盘的物理序列号,下面是代码,可以获得,现在问题是,当电脑插入存储设备,如mp3时,程序获得的就不是硬盘序列号了,而是关于mp3的信息,我机器上是“USB 2.0(HS)、、、”,怎么解决呀,小弟急用
string hardNumber = "";
                ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive");
                ManagementObjectCollection moc1 = cimobject1.GetInstances();
                try
                {
                    foreach (ManagementObject mo in moc1)
                    {
                        hardNumber = (string)mo.Properties["Model"].Value;
                       
                    }
                    MessageBox.Show(hardNumber);
                }
                catch
                { 
                }

解决方案 »

  1.   

    参考:
    http://topic.csdn.net/u/20071027/16/955bf7e0-6bbc-4049-af09-ac6e48189743.html
    判断类型来获取
      

  2.   


    //因为你的moc1是个Collection,你取到的只是最后一个盘的信息
                string hardNumber = "";
                ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive");
                ManagementObjectCollection moc1 = cimobject1.GetInstances();
                try
                {
                    foreach (ManagementObject mo in moc1)
                    {
                        hardNumber = (string)mo.Properties["Model"].Value;
                        this.listBox1.Items.Add(hardNumber);//there
                    }
                }
                catch
                {
                }
      

  3.   

    因为你的moc1是个Collection,你取到的只是最后一个盘的信息
      

  4.   

    string hardNumber = ""; 
                    ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive"); 
                    ManagementObjectCollection moc1 = cimobject1.GetInstances(); 
                    try 
                    { 
                        foreach (ManagementObject mo in moc1) 
                        { 
                            if((string)mo.Properties["DeviceID"] ==@"\\.\PHYSICALDRIVE0")
                            {
                                    hardNumber = (string)mo.Properties["Model"].Value; 
                                    break;
                            }                      
                        } 
                        MessageBox.Show(hardNumber); 
                    } 
                    catch 
                    { 
                    }
      

  5.   


    string hardNumber = ""; 
                    ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive"); 
                    ManagementObjectCollection moc1 = cimobject1.GetInstances(); 
                    try 
                    { 
                        foreach (ManagementObject mo in moc1) 
                        { 
                            if((string)mo.Properties["DeviceID"] ==@"\\.\PHYSICALDRIVE0") 
                            { 
                                    hardNumber = (string)mo.Properties["Model"].Value; 
                                    break; 
                            }                      
                        } 
                        MessageBox.Show(hardNumber); 
                    } 
                    catch 
                    { 
                    }
      

  6.   

    if((string)mo.Properties["DeviceID"] ==@"\\.\PHYSICALDRIVE0") 
    对不起呀,可是这里报错,“无法将、、、类型转化为string类型”,把前面的string去掉,后面换成
    if(mo.Properties["DeviceID"].Tostring() ==@"\\.\PHYSICALDRIVE0") ,就什么也获得不了,高手再指教,谢谢
      

  7.   

    sorry
    string hardNumber = ""; 
                    ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive"); 
                    ManagementObjectCollection moc1 = cimobject1.GetInstances(); 
                    try 
                    { 
                        foreach (ManagementObject mo in moc1) 
                        { 
                            if((string)mo.Properties["DeviceID"].Value  ==@"\\.\PHYSICALDRIVE0") 
                            { 
                                    hardNumber = (string)mo.Properties["Model"].Value; 
                                    break; 
                            }                      
                        } 
                        MessageBox.Show(hardNumber); 
                    } 
                    catch 
                    { 
                    }
      

  8.   

    这位大哥,再问几句报这种警告怎么解决???“上下文“0x1a2050”已断开连接。正在从当前上下文(上下文 0x1a1ee0)释放接口。这可能会导致损坏或数据丢失。要避免此问题,请确保在应用程序全部完成 RuntimeCallableWrapper (表示其内部的 COM 组件)”
      

  9.   

            public string GetWMIInfo(string sInfoType, string sWin32_Database)
            {
                try
                {
                    ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select " + sInfoType + " From " + sWin32_Database);
                    string sResult = "";
                    foreach (ManagementObject mo in searcher.Get())
                    {
                        sResult = mo[sInfoType].ToString().Trim();
                    }
                    return sResult;
                }
                catch
                {
                    return "";
                }
            }
    //获取主板序列号
            public string GetBIOSSerialNumber()
            {
                return GetWMIInfo("SerialNumber", "Win32_BIOS");
            }        //获取CPU序列号
            public string GetCPUSerialNumber()
            {
                return GetWMIInfo("ProcessorId", "Win32_Processor");
            }        //获取硬盘序列号
            public string GetHardDiskSerialNumber()
            {
                return GetWMIInfo("SerialNumber", "Win32_PhysicalMedia");
           }        //获取网卡地址
            public string GetNetCardMACAddress()
            {
                return GetWMIInfo("MACAddress", "Win32_NetworkAdapter WHERE ((MACAddress Is Not NULL) AND (Manufacturer <> 'Microsoft'))");
            }