如何获取磁盘序列号呢?获取磁盘序列号的方法有很多、如通过调用"\\.\PhysicalDrive0"@H_301_3@
、"\\.\SCSI0: "等驱动,也可以通过"WMI Services",不过本文中都不会使用前面列举的@H_301_3@
方法,而是通过“系统核心库”导出的GetVolumeInformation函数,或许你会感到疑惑 从@H_301_3@
字面看应该是“取音量信息”与“磁盘序列号”没有任何关系吧,在当初我接触到这方面得资@H_301_3@
料时也有不小疑惑,但是如果翻译成“取磁卷信息”那么或许便可以理解了吧、@H_301_3@
@H_301_3@
在上图中,可以看到通过GetVolumeInformation函数,可以获取“磁盘卷标”、“文件系统”@H_301_3@
包括“磁盘序号”等信息,当然从本文标题中可以看到,只需要“磁盘序号”的信息、@H_301_3@
上面是“GetVolumeInformation”函数的导入声明,我阐述下该函数参数的信息吧、lpRootPathName 欲取信息磁卷根路径@H_301_3@
lpVolumeNameBuffer 磁卷名称缓冲区@H_301_3@
nVolumeNameSize 磁卷名称缓冲区尺寸@H_301_3@
lpVolumeSerialNumber 磁盘序号缓冲区@H_301_3@
lpMaximumComponentLength 文件名称分段尺寸@H_301_3@
lpFileSystemFlags 文件系统标志@H_301_3@
lpFileSystemNameBuffer 文件系统名称缓冲区@H_301_3@
nFileSystemNameSize 文件系统名称缓冲区尺寸@H_301_3@
取磁卷信息,如果成功返回真否则返回假@H_301_3@
Public Const MAX_BYTE = 255 Public Const NULL = 0 Sub Main() Console.Title = "取磁盘序列号" Dim iNumOfSerials As Integer = NULL Dim strLabelBuffer = Space(MAX_BYTE),strFileSysName = Space(MAX_BYTE) If (GetVolumeInformation("C:\",strLabelBuffer,MAX_BYTE,iNumOfSerials,strFileSysName,MAX_BYTE)) Then Console.WriteLine("磁盘卷标: " + strLabelBuffer.TrimEnd()) Console.WriteLine("文件系统: " + strFileSysName.TrimEnd()) Console.WriteLine("磁盘序号: " + iNumOfSerials.ToString("X2")) End If Console.ReadKey(False) End Sub上面是一个很简单的示例代码,但是需要导入以来的命名空间,所以你需要在
Imports System.Runtime.InteropServices
示例代码: http://pan.baidu.com/s/1kUxEIMV