Office中国论坛/Access中国论坛

标题: 【转载 / 源码】VBA/VB获取硬盘序列号 [打印本页]

作者: LucasLynn    时间: 2005-9-5 00:09
标题: 【转载 / 源码】VBA/VB获取硬盘序列号
看到有过好几个帖子问过这个问题,突然想到这个功能很好,搞不好哪天自己也要用到,就专门开个帖子,从网上淘了个源码,以备用。



Private Declare Function GetVolumeInformation Lib "kernel32.dll" Alias "GetVolumeInformationA"     (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize  As Integer, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags  As Long, ByVal lpFileSystemNameBuffer As String,  ByVal nFileSystemNameSize As Long) As Long



Function GetSerialNumber(sRoot As String) As Long

    Dim lSerialNum As Long

    Dim R As Long

    Dim sTemp1 As String, sTemp2 As String

    strLabel = String$(255, Chr$(0))    '磁盘卷标

    strType = String$(255, Chr$(0))    '文件系统类型 一般为 FAT

    R = GetVolumeInformation(sRoot, strLabel, Len(strLabel), lSerialNum, 0, 0, strType, Len(strType))

    GetSerialNumber = lSerialNum

End Function

[此贴子已经被作者于2005-9-21 22:57:40编辑过]


作者: zyp    时间: 2005-9-5 00:38
收下,謝謝!
作者: wu8313    时间: 2005-9-5 02:32
我的文件系统格式均为 NTFS ,结果使用

GetSerialNumber(“c”)=0

GetSerialNumber(“d”)=0

GetSerialNumber(“e”)=0

-------------------------------------------------

这个,是获取 逻辑磁盘 分区信息的吧?NTFS好像不行。



[此贴子已经被作者于2005-9-4 18:32:47编辑过]


作者: gaoqiwen    时间: 2005-9-5 02:45
以下是引用wu8313在2005-9-4 18:32:00的发言:



我的文件系统格式均为 NTFS ,结果使用

GetSerialNumber(“c”)=0

GetSerialNumber(“d”)=0

GetSerialNumber(“e”)=0

-------------------------------------------------

这个,是获取 逻辑磁盘 分区信息的吧?NTFS好像不行。



应改为:

      GetSerialNumber (“c:\”)

只有C:\可读取磁盘的系列号
作者: wu8313    时间: 2005-9-5 03:05
喔,原来是调用错误。谢谢指正。

现在,可以读取c d e 三个分区的信息了。

----------------------

如果,仅仅需要获取 c:\ 的信息,使用如下 过程 也是可以的,免得又去指定参数。

Sub ShowDriveInfo(drvpath)

    Dim fs, d, s, t

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName(drvpath)))

    Select Case d.DriveType

        Case 0: t = "Unknown"

        Case 1: t = "Removable"

        Case 2: t = "Fixed"

        Case 3: t = "Network"

        Case 4: t = "CD-ROM"

        Case 5: t = "RAM Disk"

    End Select

    s = "Drive " & d.DriveLetter & ": - " & t

    s = s & vbCrLf & "SN: " & d.SerialNumber

    MsgBox s

End Sub

[此贴子已经被作者于2005-9-4 19:07:24编辑过]


作者: pangu3000    时间: 2006-3-18 06:19
这种方获取的是逻辑序列号,不是物理的,没有用的。每次格式化后这个号会变的,并且可以用软件改变的。
作者: xlonger    时间: 2006-3-21 21:33
有获取物理序列号的吗?
作者: lzruanwei    时间: 2006-4-3 18:45
我是小虾米一只。这么好的东东小弟不知道如何使用?咳!郁闷。跪求各位大哥赐教!!!!!!!!
作者: chaojianan    时间: 2009-10-24 11:19
谢谢分享。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3