获取硬盘序列号

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取硬盘序列号相关的知识,希望对你有一定的参考价值。

参考技术A 不拆机情况下获取计算机硬盘序列号的方法(Window 操作系统下):
运行 cmd
输入命令 >>wmic diskdrive get serialnumber

另外,工具推荐HardDisk Setinel

获取其中所有硬盘和分区的序列号

【中文标题】获取其中所有硬盘和分区的序列号【英文标题】:Get serial number of all hard disks and partitions in it 【发布时间】:2015-01-12 14:16:54 【问题描述】:

我想获取所有物理硬盘序列号(不是驱动器的卷序列号)和其中存在的分区。

其实我用DISKID32的实现来获取所有硬盘的序列号,但这不会给出硬盘中的分区。所以我打算用其他方法。

下面的代码给出了获取物理硬盘的序列号,并在每个硬盘中找到分区。

ComputerName = "."
Set wmiServices  = GetObject ( _
    "winmgmts:impersonationLevel=Impersonate!//" _
    & ComputerName)
' Get physical disk drive
Set wmiDiskDrives =  wmiServices.ExecQuery ( _
    "SELECT * FROM Win32_DiskDrive")

For Each wmiDiskDrive In wmiDiskDrives
    MsgBox "Disk drive Caption: " _
        & wmiDiskDrive.Caption _
        & VbNewLine & "DeviceID: " _
        & " (" & wmiDiskDrive.DeviceID & ")"
    MsgBox  "Serial number" _
                & wmiDiskDrive.SerialNumber
    'Use the disk drive device id to
    ' find associated partition
    query = "ASSOCIATORS OF Win32_DiskDrive.DeviceID='" _
        & wmiDiskDrive.DeviceID & "' WHERE AssocClass = Win32_DiskDriveToDiskPartition"
    Set wmiDiskPartitions = wmiServices.ExecQuery(query)

    For Each wmiDiskPartition In wmiDiskPartitions
        'Use partition device id to find logical disk
        Set wmiLogicalDisks = wmiServices.ExecQuery _
            ("ASSOCIATORS OF Win32_DiskPartition.DeviceID='" _
             & wmiDiskPartition.DeviceID & "' WHERE AssocClass = Win32_LogicalDiskToPartition")

        For Each wmiLogicalDisk In wmiLogicalDisks
            MsgBox  "Drive letter associated" _
                & " with disk drive = " _
                & wmiDiskDrive.Caption _
                & wmiDiskDrive.DeviceID _
                & VbNewLine & " Partition = " _
                & wmiDiskPartition.DeviceID _
                & VbNewLine & " is " _
                & wmiLogicalDisk.DeviceID

        Next
    Next
Next

它在 windows 8 中完美运行。但是当我在 windows XP pc 中测试时,我在获取序列号时出错,即 wmiDiskDrive.SerialNumber 。所有其他对象都正常工作。

然后我发现这个属性在windows XP、windows server 2003等中是不可用的。 现在从上面的代码我可以得到硬盘型号和其中的分区,但我想要序列号。

那么我怎样才能获得硬盘序列号和它们的分区(应该在所有 Windows 操作系统中工作)?有什么想法吗?

【问题讨论】:

Get H/D Serial number (Not Volumn Serial Number) for IDE and SATA的可能重复 @jac 它在 Windows XP 中不起作用,而且我的问题与该问题并不完全相同(因为我要求它也适用于 win xp)。我也想根据硬盘序列号获取分区。所以请不要认为它是重复的 您可能需要第 3 方 DLL 才能在 Vista/Non XP Pro 之前的机器上获得它……或一些低级 C++ 代码 为什么还要关心一个生命周期已经结束半年多的操作系统? 你有没有找到解决这个问题的方法?我也一直在尝试为我在 Tcl 中编写的脚本解决这个问题,我研究过一些资源来帮助我,这些资源是 WMIC 命令和 DISKPART 命令。 !WMIC !DiskPart 也许有一些潜力,但如果你已经找到了不同的解决方案,请告诉我们。 【参考方案1】:

这应该可以解决你的问题..

Public Function GetDriveSerialNumber(DrvL As String) As Long

         Dim fso As Object, Drv As Object
        Dim driveletter As String
        Dim DriveSerial As String
         Set fso = CreateObject("Scripting.FileSystemObject")
        driveletter = DrvL


             Set Drv = fso.GetDrive(driveletter)


         With Drv
             If .IsReady Then
                 DriveSerial = Abs(.SerialNumber)
             Else
                 DriveSerial = -1
             End If
         End With


         Set Drv = Nothing
         Set fso = Nothing

         GetDriveSerialNumber = DriveSerial

     End Function

【讨论】:

您代码中的序列号是卷序列号,它不是我想要的。在我的问题中,我提到我不想要卷序列号。我想要唯一的硬盘序列号。我也想获取硬盘中的所有分区。

以上是关于获取硬盘序列号的主要内容,如果未能解决你的问题,请参考以下文章

批处理 命令获取主板序列号 硬盘序列号 CPU ID?

VC++如何获取机器码?硬盘序列号、CPU编号、BIOS编号等~

获取其中所有硬盘和分区的序列号

如何使用 C# 获取硬盘序列号?

获取硬盘序列号

通过PHP获取厂商提供的硬盘序列号