我做一个软件,需要获取cpu.硬盘序列号,在网上找了获取cpu方法,但在win98下不行,有没有在各种系统下都能执行的?另外,为了保护版权,到底用cpu.硬盘序列号哪个好?
我找到的方法是:取得CPU序列号
Private Type OSVERSIONINFO
        dwOSVersionInfoSize As Long
        dwMajorVersion As Long
        dwMinorVersion As Long
        dwBuildNumber As Long
        dwPlatformId As Long
        szCSDVersion As String * 128      '  Maintenance string for PSS usage
End Type
Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Private Const VER_PLATFORM_WIN32_NT = 2
Private Const VER_PLATFORM_WIN32_WINDOWS = 1
Private Const VER_PLATFORM_WIN32s = 0
Private Sub Command1_Click()
    Dim len5 As Long, aa As Long
    Dim cmprName As String
    Dim osver As OSVERSIONINFO
    '取得Computer Name
    cmprName = String(255, 0)
    len5 = 256
    aa = GetComputerName(cmprName, len5)
    cmprName = Left(cmprName, InStr(1, cmprName, Chr(0)) - 1)
    Computer = cmprName        '取得CPU端口号
    Set CPUs = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & Computer & "\root\cimv2").ExecQuery("select * from Win32_Processor")
    For Each mycpu In CPUs
      Text1.Text = mycpu.ProcessorId
    Next
End Sub

解决方案 »

  1.   

    用网卡MAC,98下通过Private Const NCBASTAT = &H33
    Private Const NCBNAMSZ = 16
    Private Const HEAP_ZERO_MEMORY = &H8
    Private Const HEAP_GENERATE_EXCEPTIONS = &H4
    Private Const NCBRESET = &H32Private Type NCB
      ncb_command As Byte
      ncb_retcode As Byte
      ncb_lsn As Byte
      ncb_num As Byte
      ncb_buffer As Long
      ncb_length As Integer
      ncb_callname As String * NCBNAMSZ
      ncb_name As String * NCBNAMSZ
      ncb_rto As Byte
      ncb_sto As Byte
      ncb_post As Long
      ncb_lana_num As Byte
      ncb_cmd_cplt As Byte
      ncb_reserve(9) As Byte ' Reserved, must be 0
      ncb_event As Long
    End TypePrivate Type ADAPTER_STATUS
      adapter_address(5) As Byte
      rev_major As Byte
      reserved0 As Byte
      adapter_type As Byte
      rev_minor As Byte
      duration As Integer
      frmr_recv As Integer
      frmr_xmit As Integer
      iframe_recv_err As Integer
      xmit_aborts As Integer
      xmit_success As Long
      recv_success As Long
      iframe_xmit_err As Integer
      recv_buff_unavail As Integer
      t1_timeouts As Integer
      ti_timeouts As Integer
      Reserved1 As Long
      free_ncbs As Integer
      max_cfg_ncbs As Integer
      max_ncbs As Integer
      xmit_buf_unavail As Integer
      max_dgram_size As Integer
      pending_sess As Integer
      max_cfg_sess As Integer
      max_sess As Integer
      max_sess_pkt_size As Integer
      name_count As Integer
    End TypePrivate Type NAME_BUFFER
      name As String * NCBNAMSZ
      name_num As Integer
      name_flags As Integer
    End TypePrivate Type ASTAT
      adapt As ADAPTER_STATUS
      NameBuff(30) As NAME_BUFFER
    End TypePrivate Declare Function Netbios Lib "netapi32.dll" _
    (pncb As NCB) As BytePrivate Declare Sub CopyMemory Lib "kernel32" Alias _
    "RtlMoveMemory" (hpvDest As Any, ByVal hpvSource As Long, _
    ByVal cbCopy As Long)Private Declare Function GetProcessHeap Lib "kernel32" () _
    As LongPrivate Declare Function HeapAlloc Lib "kernel32" _
    (ByVal hHeap As Long, ByVal dwFlags As Long, _
    ByVal dwBytes As Long) As LongPrivate Declare Function HeapFree Lib "kernel32" _
    (ByVal hHeap As Long, ByVal dwFlags As Long, lpMem As Any) _
    As LongPrivate Function EthernetAddress(LanaNumber As Long) _
    As String  Dim udtNCB       As NCB
      Dim bytResponse As Byte
      Dim udtASTAT     As ASTAT
      Dim udtTempASTAT As ASTAT
      Dim lngASTAT     As Long
      Dim strOut       As String
      Dim x            As Integer  udtNCB.ncb_command = NCBRESET
      bytResponse = Netbios(udtNCB)
      udtNCB.ncb_command = NCBASTAT
      udtNCB.ncb_lana_num = LanaNumber
      udtNCB.ncb_callname = "* "
      udtNCB.ncb_length = Len(udtASTAT)
      lngASTAT = HeapAlloc(GetProcessHeap(), _
    HEAP_GENERATE_EXCEPTIONS Or HEAP_ZERO_MEMORY, udtNCB.ncb_length)  strOut = ""
      If lngASTAT Then
        udtNCB.ncb_buffer = lngASTAT
        bytResponse = Netbios(udtNCB)
        CopyMemory udtASTAT, udtNCB.ncb_buffer, Len(udtASTAT)
         With udtASTAT.adapt
          For x = 0 To 5
            strOut = strOut & Right$("00" & Hex$(.adapter_address(x)), 2)
          Next x
        End With
        HeapFree GetProcessHeap(), 0, lngASTAT
      End If
      EthernetAddress = strOut
    End FunctionPrivate Sub Command1_Click()
    MsgBox EthernetAddress(0)
    End Sub
      

  2.   

    我认为还是用cpu或硬盘物理序列号比较好,就是没有找到在windows各个版本中都能用的,请各位大哥帮助!!
      

  3.   

    我有个小程序 可以读CPU类型 是VB内嵌汇编的 可以启发一下吧 98下NT下都可以运行的
    或者还是调用个DLL吧
    E-MAIL给我我给你发过去
      

  4.   

    也给我一份好吗?
       [email protected]
      

  5.   

    也给我一分吧。[email protected]
      

  6.   

    这个也我需要的,有给我一份吧,[email protected]
    先谢了.
      

  7.   

    当然是CPU好了!一般都不会坏。
    ——————————————————————————————
    欢迎访问http://lgxyslldw.512j.com ,你可能会有意外的收获!
      

  8.   

    能发一份我吗?    现在我正做一个系统,试了N种方法都不行。win98下就是不行。