下载并安装"雁留声名录系统",然后你就可以得到第一个硬盘的序列号了! Private Declare Function GetDiskSN Lib "GetDiskSN.dll" (ByVal lpszSN As String) As Double Dim s As String s = String(1024, Chr(0)) GetDiskSN (s) s = Trim(Replace(s, Chr(0), "")) msgbox s 免费!
'在WIN98下,把在SYSTEM目录下smartvsd.vxd这个文件拷贝到SYSTEM\IOSUBSYS '然后重新启动,然后再运行以下程序 ’-----------------------以下代码经过测试----------------------- ' ---------------——-----到时间可别忘了给分!!!!------------ '注意:以下代码得到的是硬盘厂商固定的序列号,而不是硬盘的逻辑序列号 ’以下代码支持Windows 95 OSR2, Windows 98, Windwos 98 SE, Windows ME '第一个硬盘必须为IDE接口 ’------------------------源代码开始-------------------------------- Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long Private Declare Function DeviceIoControl Lib "kernel32" (ByVal hDevice As Long, ByVal dwIoControlCode As Long, lpInBuffer As Any, ByVal nInBufferSize As Long, lpOutBuffer As Any, ByVal nOutBufferSize As Long, lpBytesReturned As Long, lpOverlapped As Long) As Long Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Type IDERegs bFeaturesReg As Byte bSectorCountReg As Byte bSectorNumberReg As Byte bCylLowReg As Byte bCylHighReg As Byte bDriveHeadReg As Byte bCommandReg As Byte bReserved As Byte End TypeType InParams cBufferSize As Long irDriveRegs As IDERegs bDriveNumber As Byte bReserved(0 To 19) As Byte End Type Dim inbuff As InParams Dim outbuff(0 To 528) As ByteDim SerialNumber As String Function ChangeByteOrder(s As Variant, nLen As Long) Dim i As Long Dim pi As Long pi = 0 For i = 0 To nLen / 2 - 1 c = s(pi) s(pi) = s(pi + 1) s(pi + 1) = c pi = pi + 2 NextEnd FunctionDim SerialNumber As StringSub Main() Dim nBytes As Long Dim nRet As Long Dim hVxD As LongDim BSerialNumber(0 To 19) As Byteinbuff.cBufferSize = 512 inbuff.bDriveNumber = 0 inbuff.irDriveRegs.bSectorCountReg = 1 inbuff.irDriveRegs.bSectorNumberReg = 1 inbuff.irDriveRegs.bCylHighReg = 0 inbuff.irDriveRegs.bCylLowReg = 0 inbuff.irDriveRegs.bDriveHeadReg = &HA0 inbuff.irDriveRegs.bCommandReg = &HEC hVxD = CreateFile("\\.\smartvsd", 0, 0, 0, 1, 0, 0) nRet = DeviceIoControl(hVxD, &H7C088, inbuff, Len(inbuff) - 1, outbuff(0), 528, nBytes, 0) If nRet > 0 Then CopyMemory BSerialNumber(0), outbuff(36), 20 SerialNumber = StrConv(BSerialNumber, vbUnicode) SerialNumber = Trim(SerialNumber) End If Call CloseHandle(hVxD)MsgBox SerialNumber End Sub'----------代码结束---------------------------------
to jyu1221: 哪儿有smartvsd.vxd? 我没有!to 其他人: 我现在有事去了,没空试大家的解答,要给分也得明天了。 另外 我的EMAIL:[email protected]
http://www.applevb.com/lib/diskio.rar
VC源程序:
http://www.applevb.com/DiskID.rar
http://ygyuan.go.163.com/
http://ygyuan.3322.net/
下载并安装"雁留声名录系统",然后你就可以得到第一个硬盘的序列号了!
Private Declare Function GetDiskSN Lib "GetDiskSN.dll" (ByVal lpszSN As String) As Double
Dim s As String
s = String(1024, Chr(0))
GetDiskSN (s)
s = Trim(Replace(s, Chr(0), ""))
msgbox s
免费!
'然后重新启动,然后再运行以下程序
’-----------------------以下代码经过测试-----------------------
' ---------------——-----到时间可别忘了给分!!!!------------
'注意:以下代码得到的是硬盘厂商固定的序列号,而不是硬盘的逻辑序列号
’以下代码支持Windows 95 OSR2, Windows 98, Windwos 98 SE, Windows ME
'第一个硬盘必须为IDE接口
’------------------------源代码开始--------------------------------
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function DeviceIoControl Lib "kernel32" (ByVal hDevice As Long, ByVal dwIoControlCode As Long, lpInBuffer As Any, ByVal nInBufferSize As Long, lpOutBuffer As Any, ByVal nOutBufferSize As Long, lpBytesReturned As Long, lpOverlapped As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Type IDERegs
bFeaturesReg As Byte
bSectorCountReg As Byte
bSectorNumberReg As Byte
bCylLowReg As Byte
bCylHighReg As Byte
bDriveHeadReg As Byte
bCommandReg As Byte
bReserved As Byte
End TypeType InParams
cBufferSize As Long
irDriveRegs As IDERegs
bDriveNumber As Byte
bReserved(0 To 19) As Byte
End Type
Dim inbuff As InParams
Dim outbuff(0 To 528) As ByteDim SerialNumber As String
Function ChangeByteOrder(s As Variant, nLen As Long)
Dim i As Long
Dim pi As Long
pi = 0
For i = 0 To nLen / 2 - 1
c = s(pi)
s(pi) = s(pi + 1)
s(pi + 1) = c
pi = pi + 2
NextEnd FunctionDim SerialNumber As StringSub Main()
Dim nBytes As Long
Dim nRet As Long
Dim hVxD As LongDim BSerialNumber(0 To 19) As Byteinbuff.cBufferSize = 512
inbuff.bDriveNumber = 0
inbuff.irDriveRegs.bSectorCountReg = 1
inbuff.irDriveRegs.bSectorNumberReg = 1
inbuff.irDriveRegs.bCylHighReg = 0
inbuff.irDriveRegs.bCylLowReg = 0
inbuff.irDriveRegs.bDriveHeadReg = &HA0
inbuff.irDriveRegs.bCommandReg = &HEC
hVxD = CreateFile("\\.\smartvsd", 0, 0, 0, 1, 0, 0)
nRet = DeviceIoControl(hVxD, &H7C088, inbuff, Len(inbuff) - 1, outbuff(0), 528, nBytes, 0)
If nRet > 0 Then
CopyMemory BSerialNumber(0), outbuff(36), 20
SerialNumber = StrConv(BSerialNumber, vbUnicode)
SerialNumber = Trim(SerialNumber)
End If
Call CloseHandle(hVxD)MsgBox SerialNumber
End Sub'----------代码结束---------------------------------
哪儿有smartvsd.vxd? 我没有!to 其他人:
我现在有事去了,没空试大家的解答,要给分也得明天了。 另外 我的EMAIL:[email protected]
你的DLL有局限啊!!! 我的机器的硬盘的是从盘,而且接在第2个IDE接口上,所以得不到序列号! 而你的DLL调用又没有参数可用,给个参数让我自己遍历一遍也好啊!
如果你的版本和我不一样,可能包含在另外的文件的.但是肯定有的。
如果你是从WIN95直接升级到WIN98的,那么在WINDOWS\SYSTEM目录下
就已经有这个文件了。