如果一台电脑挂有两个硬盘,有没有办法通过访问其中一个硬盘来获得此硬盘的序列号?

解决方案 »

  1.   

    难道楼主想用这个做软件的机器码?
    ====CSDN 小助手 V2.0 2005年10月16日发布====
    rexzhou#gmail.com
      

  2.   

    Using System.Management;            ManagementClass mc = new ManagementClass("Win32_PhysicalMedia");
                foreach(ManagementObject mo in mc.GetInstances())
                {
                    Console.WriteLine(mo.Properties["SerialNumber"].Value.ToString());
                }
      

  3.   

    http://www.sunmast.com/soft/IdeInfo.zip
      

  4.   

    static string GetSerial(int Index)
            {
                string DeviceName = String.Format(@"\\.\PHYSICALDRIVE{0}", Index);
                ManagementClass mc = new ManagementClass("Win32_PhysicalMedia");
                ManagementObjectCollection moc = mc.GetInstances();
                int i = 0;
                foreach (ManagementObject mo in mc.GetInstances())
                {
                    if (i++ == Index)
                        return mo.Properties["SerialNumber"].Value.ToString();
                }            return "";
            }hehe~~~
      

  5.   

    楼上的方法不支持Win98/ME :)
      

  6.   

    下在给出脚本代码,你改为C#吧
    第一步:获取硬盘名称(如果有就不用)
    strComputer = "." 
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
    Set colItems = objWMIService.ExecQuery( _
        "SELECT * FROM Win32_DiskDrive",,48) 
    For Each objItem in colItems 
        Wscript.Echo "-----------------------------------"
        Wscript.Echo "Win32_DiskDrive instance"
        Wscript.Echo "-----------------------------------"
        Wscript.Echo "DeviceID: " & objItem.DeviceID
        Wscript.Echo "Name: " & objItem.Name
    Next
    第二步:获取指定盘的序列号
    strComputer = "." 
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
    Set colItems = objWMIService.ExecQuery( _
        "SELECT * FROM Win32_PhysicalMedia WHERE Tag = '硬盘名称'",,48) 
    For Each objItem in colItems 
        Wscript.Echo "-----------------------------------"
        Wscript.Echo "Win32_PhysicalMedia instance"
        Wscript.Echo "-----------------------------------"
        Wscript.Echo "SerialNumber: " & objItem.SerialNumber
        Wscript.Echo "Tag: " & objItem.Tag
    Next
      

  7.   

    对不起,Win98/Me在WMI支持方面有点问题。你可以看一下这个文章:http://dev.21tx.com/2005/01/08/11565.html
      

  8.   

    一个物理硬盘不是可分为C,D,E,F等盘符嘛,我的目的就是读出电脑有几个物理硬盘,并且读出每个硬盘有哪些逻辑盘符,并且能通过访问逻辑盘符得到是属于哪个物理盘的。
      

  9.   

    老大,你看一下你提的问题!
    方法如下:使用WMI,“select * from Win32_DiskDrive”得到物理硬盘的DeviceID,再根据查Win32_DiskDriveToDiskPartition。(Antecedent属性中对应物理磁盘DeviceID,Dependent对应逻辑磁盘DeviceID),再从Win32_DiskPartition得到对应的分区信息。
      

  10.   

    ManagementObjectSearcher searcher = new 
                ManagementObjectSearcher("select * from Win32_DiskDrive");
            foreach (ManagementObject share in searcher.Get()) {
              ManagementObjectSearcher searcher1 = new 
                ManagementObjectSearcher("select * from Win32_DiskDriveToDiskPartition where Antecedentlike '%"+share.DeviceId+"'");
                foreach (ManagementObject share1 in searcher.Get()) {
                     ManagementObjectSearcher searcher2 = ManagementObjectSearcher("select * from Win32_DiskPartition where Name like '%"+share1.Dependent.substring(...)+"'");
    {
                     输出当前share的名称(物理硬盘信息)share.name
                     输出所属逻辑分区的信息share2.属性
    }
                 }
            }
      

  11.   

    fsdy2000(乡愁),谢谢你!知道怎样用WMI获得移动硬盘的序列号吗?我试了
    ManagementObjectSearcher mc = new ManagementObjectSearcher
    ("SELECT * FROM Win32_PhysicalMedia"); 
    int i = 0;
    foreach (ManagementObject mo in mc.Get())
    {
    if (i++ == Index)
    {
    string a=mo["SerialNumber"].ToString().Trim();
    textBox2.Text=a;
    break;
    }
    }
    得到的移动硬盘序列号是空的,怎么回事啊????
      

  12.   

    Win32_LogicalDisk的VolumeSerialNumber属性
    或使用Scripting.FileSystemObject,其Drives的每个Drive会有一个SerialNumber属性