通过调用api来获得磁盘的序列号
Public Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, ByVal lpVolumeSerial_Numberber As Long, ByVal lpMaximumComponentLength As Long, ByVal lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long
Dim SerialNum As Long
Dim Res As Long
Dim Temp1 As String
Dim Temp2 As String
'initialise the strings
Temp1 = space(255)
Temp2 = space(255)
'call the API function
Res = GetVolumeInformation(strDrive, Temp1, Len(Temp1), SerialNum, 0, 0, Temp2, Len(Temp2))
GetSerialNumber = SerialNum
上面的代码放在vb6里面serialNum是能够获得值的,但放到.net里serialNum的值为0,测试很长时间也找不出原因,那位仁兄用过,帮忙解决一下,谢谢
---------------------------------------------------------------
hoho, win32 的Long 是32位的 所以在.net 里要定义为 integer
---------------------------------------------------------------
下面得出磁盘序列号
Private Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Integer, ByRef lpVolumeSerialNumber As Long, ByVal lpMaximumComponentLength As Integer, ByVal lpFileSystemFlags As Integer, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Integer) As Integer
...
Dim SerialNumber As Long
Dim TempStr1 As New String(Chr(0), 255)
Dim TempStr2 As New String(Chr(0), 255)
Dim TempInt1, TempInt2 As Integer
GetVolumeInformation("C:", TempStr1, 256, SerialNumber, TempInt1, TempInt2, TempStr2, 256)
MsgBox("C盘序列号:" & SerialNumber)
-------------------------------------------------------------------------
问题已经解决,谢谢楼上各位的热心帮忙
我整理了一下,已加密做成注册码了,下面详细解释一下
下面代码得出的是:volumn serival number
Public Function GetDriveSerial(ByVal DriveLetter As String) As String
'Returns the serial number of the specified drive
'ie, GetDriveSerial("c:")
Dim strSelectText As String = "Win32_logicaldisk='" & DriveLetter &"'"
Dim objMO As New System.Management.ManagementObject(strSelectText)
objMO.Get()
Return CType(objMO.Properties("VolumeSerialNumber").Value, String)
End Function
通过api得出的是磁盘序列号,两者结果不同,volumn serival number 在磁盘整理的时候可以看到
通过api得到的是不能看到的.