VB获取硬盘序列号的问题!!!(固态和机械硬盘)
vb吧
全部回复
仅看楼主
level 1
有些电脑都是固态硬盘做系统,机械硬盘做从盘,我用VB获取硬盘序列号的时候,有时候获取的是固态硬盘,有时候获取的是机械硬盘,请问如何只获取系统盘为固态硬盘的序列号?
2023年11月26日 13点11分 1
level 1
'信息类型枚举
Enum eumInfoType
hdmodelsn = 0
hdOnlyModel = 1
hdOnlySN = 2
End Enum
'磁盘通道枚举
Enum eumDiskNo
hdPrimaryMaster = 0
hdPrimarySlave = 1
hdSecondaryMaster = 2
hdSecondarySlave = 3
End Enum
'取得逻辑盘序列号(非唯一)
Function GetDiskVolume(Optional ByVal strDiskName = "C") As String
Dim TempStr1 As String * 256, TempStr2 As String * 256
Dim TempLon1 As Long, TempLon2 As Long, GetVal As Long
Dim tmpVol As String
Call GetVolumeInformation(strDiskName & ":\", TempStr1, 256, GetVal, TempLon1, TempLon2, TempStr2, 256)
If GetVal = 0 Then
tmpVol = ""
Else
tmpVol = Hex(GetVal)
tmpVol = String(8 - Len(tmpVol), "0") & tmpVol
tmpVol = Left(tmpVol, 4) & "-" & Right(tmpVol, 4)
End If
GetDiskVolume = tmpVol
End Function
'取得硬盘信息:型号/物理系列号(唯一)
Function GetHardDiskInfo(Optional ByVal numDisk As eumDiskNo = hdPrimaryMaster, Optional ByVal numType As eumInfoType = hdOnlySN) As String
If GetDiskInfo(numDisk) = 1 Then
Dim pSerialNumber As String, pModelNumber As String
pSerialNumber = StrConv(m_DiskInfo.sSerialNumber, vbUnicode)
pModelNumber = StrConv(m_DiskInfo.sModelNumber, vbUnicode)
Select Case numType
Case hdOnlyModel '仅型号
GetHardDiskInfo = Trim(pModelNumber)
Case hdOnlySN '仅系列号
GetHardDiskInfo = Trim(pSerialNumber)
Case Else '型号,系列号
GetHardDiskInfo = Trim(pModelNumber) & "," & Trim(pSerialNumber)
End Select
End If
2023年11月26日 13点11分 2
level 8
估计得读固件信息吧,单靠卷标什么的是判断不出来的,固态和机械硬盘使用上没有区别,表层是一样的,低层是不一样的,试试API DeviceIOControl读取信息,我也没尝试过
2023年11月27日 06点11分 3
还有还得考虑M.2接口的硬盘,这种VB网上有读取序列号的代码应该都是失效的,这种新接口的硬盘读写速度很快,用户的占比会很大,读取不了程序用途就不大了
2023年11月27日 07点11分
level 1
能不能先。测速。200兆往上的
2024年01月23日 18点01分 4
1