mikewolf2k 发表于 2003-12-16 18:34:00

用vb获得硬盘序列号

请问用vb中的serialnumber获得的硬盘序列号究竟是什么,format/fdisk后会不会改变?

myfreemind 发表于 2003-12-16 18:39:00

获取逻辑区序列号format以后就会变!物理序列号就不会!

gzy 发表于 2003-12-16 18:40:00

在硬盘格式化后都会重新生成,且不会重复。

mikewolf2k 发表于 2003-12-16 18:40:00

vb怎样获得物理序列号呢?

gzy 发表于 2003-12-16 18:57:00

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 nFilesSystemNameSize As Long) As Long

Function GetSerialNumber(sRoot As String) As Long
Dim lSerialNum As Long
Dim R As Long
Dim strLabel As String, strType As String
strLabel = String$(255, Chr$(0))
strType = String$(255, Chr$(0))
R = GetVolumeInformation(sRoot, strLabel, Len(strLabel), _
lSerialNum, 0, 0, strType, Len(strType))
GetSerialNumber = lSerialNum
End Function
用法:lserial = GetSerialNumber("c:\")
         lserial = GetSerialNumber("d:\")
         lserial = GetSerialNumber("e:\")
   如果驱动器不存在,则返回0。
本程序还可得到:磁盘卷标(strLabel),文件系统类型(strType)。

mikewolf2k 发表于 2003-12-16 19:13:00

谢,待会试试

mikewolf2k 发表于 2003-12-16 19:31:00

试过了.还有些问题:
1 获得的是硬盘物理序列号吗?为什么输入不同的逻辑分区得到的值不同?
2 重新分区后改变了c盘的大小,获得的值还相同吗?
3 重新分区后改变了分区数目,获得的值还相同吗?
4 获得的值位数有规定么,我用硬盘获得的是9位数,软驱是10位数,别的(网络映射,移动存储等)怎样?

myfreemind 发表于 2003-12-16 20:23:00

获取物理序列号我前一段时间在一个网站上看到过,需要用他们提供的控件,而且要注册,所以就没有去下载!

莫名 发表于 2003-12-16 20:31:00

请看主题:
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=10152

mikewolf2k 发表于 2003-12-16 21:59:00

看过了,但不知道用法.上面所说的例子链接已经失效了,请9楼再指点一下.
页: [1] 2
查看完整版本: 用vb获得硬盘序列号