如果是在Windows2000或WindowsXP中还可以用 WMI 来帮忙。
(注:下面用BASIC语言描述)例如:
1、取的物理硬盘的信息: Dim DiskDriveSet
Dim dd
Set DiskDriveSet = GetObject("winmgmts:{impersonationLevel=impersonate}"). _
InstancesOf("Win32_DiskDrive")
For Each dd In DiskDriveSet
'identification info
Debug.Pring dd.Index '//硬盘的编号,如 0、1、2……
Debug.Pring dd.DeviceID '//设备ID,如\\.\PHYSICALDRIVE1
Debug.Pring dd.Model '//设备型号,如IC35L040AVER07-0(这个是IBM Deskstar 40G 硬盘的型号,不知道这个
是不是就是论坛经常提到的 硬盘序列号。)
Debug.Pring dd.MediaType '//设备介质类型 'physical info
Debug.Pring FormatNumber(dd.Size, 0) '//盘的容量
Debug.Pring dd.Partitions '//有多少个分区
Debug.Pring FormatNumber(dd.BytesPerSector, 0)
Debug.Pring FormatNumber(dd.SectorsPerTrack, 0)
Debug.Pring FormatNumber(dd.TotalCylinders, 0) Next '//如果有多个硬盘则显示下一个硬盘的信息。2、取得逻辑盘的信息
dim LogicalDiskSet
dim ld
Set LogicalDiskSet = GetObject("winmgmts:{impersonationLevel=impersonate}"). _
InstancesOf("Win32_LogicalDisk")
For Each ld In LogicalDiskSet
'元素有很多下面仅列出三个,其他的可以查看MSDN
Debug.Pring ld.Name
Debug.Pring ld.Size
Debug.Pring ld.VolumeName
Debug.Pring ld.VolumeSerialNumber
Next
不过……………………
他们的功能都是独立,没有关联的。
即我不可以得到一个物理硬盘的所有分区的盘符是什么!!!按道理用 WMI 的 ASSOCIATORS 可以。
例如用这样的方法可以得出某个盘符是属于那个物理盘(假设我有多个硬盘)Set DiskSet = GetObject("winmgmts:").ExecQuery("Associators of {win32_LogicalDisk='C:'} where ResultClass = Win32_DiskPartition")For Each dd In DiskSet
Debug.Print dd.Name & " => " & dd.DiskIndex
Next可是反过来做却不行:Set DiskSet = GetObject("winmgmts:").ExecQuery("Associators of {Win32_DiskDrive=0} where ResultClass = win32_LogicalDisk")
For Each dd In DiskSet
Debug.Print dd.Name
Next所以…………
问题仍然未解决。相关的资料可以看:
http://www.csdn.net/Expert/TopicView1.asp?id=895291
http://www.csdn.net/Expert/TopicView1.asp?id=893191希望热衷于研究编程的同志们一同动手把它解决掉 :))
(注:下面用BASIC语言描述)例如:
1、取的物理硬盘的信息: Dim DiskDriveSet
Dim dd
Set DiskDriveSet = GetObject("winmgmts:{impersonationLevel=impersonate}"). _
InstancesOf("Win32_DiskDrive")
For Each dd In DiskDriveSet
'identification info
Debug.Pring dd.Index '//硬盘的编号,如 0、1、2……
Debug.Pring dd.DeviceID '//设备ID,如\\.\PHYSICALDRIVE1
Debug.Pring dd.Model '//设备型号,如IC35L040AVER07-0(这个是IBM Deskstar 40G 硬盘的型号,不知道这个
是不是就是论坛经常提到的 硬盘序列号。)
Debug.Pring dd.MediaType '//设备介质类型 'physical info
Debug.Pring FormatNumber(dd.Size, 0) '//盘的容量
Debug.Pring dd.Partitions '//有多少个分区
Debug.Pring FormatNumber(dd.BytesPerSector, 0)
Debug.Pring FormatNumber(dd.SectorsPerTrack, 0)
Debug.Pring FormatNumber(dd.TotalCylinders, 0) Next '//如果有多个硬盘则显示下一个硬盘的信息。2、取得逻辑盘的信息
dim LogicalDiskSet
dim ld
Set LogicalDiskSet = GetObject("winmgmts:{impersonationLevel=impersonate}"). _
InstancesOf("Win32_LogicalDisk")
For Each ld In LogicalDiskSet
'元素有很多下面仅列出三个,其他的可以查看MSDN
Debug.Pring ld.Name
Debug.Pring ld.Size
Debug.Pring ld.VolumeName
Debug.Pring ld.VolumeSerialNumber
Next
不过……………………
他们的功能都是独立,没有关联的。
即我不可以得到一个物理硬盘的所有分区的盘符是什么!!!按道理用 WMI 的 ASSOCIATORS 可以。
例如用这样的方法可以得出某个盘符是属于那个物理盘(假设我有多个硬盘)Set DiskSet = GetObject("winmgmts:").ExecQuery("Associators of {win32_LogicalDisk='C:'} where ResultClass = Win32_DiskPartition")For Each dd In DiskSet
Debug.Print dd.Name & " => " & dd.DiskIndex
Next可是反过来做却不行:Set DiskSet = GetObject("winmgmts:").ExecQuery("Associators of {Win32_DiskDrive=0} where ResultClass = win32_LogicalDisk")
For Each dd In DiskSet
Debug.Print dd.Name
Next所以…………
问题仍然未解决。相关的资料可以看:
http://www.csdn.net/Expert/TopicView1.asp?id=895291
http://www.csdn.net/Expert/TopicView1.asp?id=893191希望热衷于研究编程的同志们一同动手把它解决掉 :))
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货