to dapha: 
 暂不讨论你的收费问题,可你的程序在我的机器上得不到硬盘的序列号!!!  你是否测试的不够? 还是有什么特别的使用说明?

解决方案 »

  1.   

    VC写的DLL,带Delphi范例:
    http://www.applevb.com/lib/diskio.rar
    VC源程序:
    http://www.applevb.com/DiskID.rar
      

  2.   

    http://www.csdn.net/expert/topic/577/577681.xml?temp=.9733698
    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  
    免费!
      

  3.   

    '在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'----------代码结束---------------------------------
      

  4.   

    to jyu1221: 
        哪儿有smartvsd.vxd? 我没有!to 其他人:
        我现在有事去了,没空试大家的解答,要给分也得明天了。 另外 我的EMAIL:[email protected]
      

  5.   

    to y1g1y1(袁飞☆曾经沧海难为水,除却VB不是云☆) 
     
     你的DLL有局限啊!!! 我的机器的硬盘的是从盘,而且接在第2个IDE接口上,所以得不到序列号! 而你的DLL调用又没有参数可用,给个参数让我自己遍历一遍也好啊!
      

  6.   

    在WIN98的安装盘中有的,win98_62.cab中包含的
    如果你的版本和我不一样,可能包含在另外的文件的.但是肯定有的。
    如果你是从WIN95直接升级到WIN98的,那么在WINDOWS\SYSTEM目录下
    就已经有这个文件了。
      

  7.   

    我找到smartvsd.vxd了,但他只能查询接到第一个IDE接口的主盘?或是我不知道调用方法?  另外它不适合WIN2000吗?