我知道微软有发布了如何修改序列号的脚本,我只想要查看序列号的功能,
不知道谁是否在VB中能实现否?

解决方案 »

  1.   

    注册表项:Software\Microsoft\Windows\CurrentVersion下面可找到
      

  2.   

    很感谢您的回答,可是在XP中是无法通过你所说的方法进行查看的.
    我用过几个小程序,可以查看XP的安装序列号..像硬件检测工具EVEREST就可以看到..我想序列号肯定是被加密放在某个地方了.听说不是放在注册表中.这个本人真是不得而知.如果有谁知道请告知一二.
      

  3.   

    Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
    Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
    Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long ' Note that if you declare the lpData parameter as String, you must pass it By Value.
    Private Const REG_BINARY = 3
    Private Const HKEY_LOCAL_MACHINE = &H80000002
    Private Const ERROR_SUCCESS = 0&Private Function sGetXPCDKey() As String
        Dim bDigitalProductID() As Byte
        Dim bProductKey() As Byte
        Dim ilByte As Long
        Dim lDataLen As Long
        Dim hKey As Long
        If RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\MICROSOFT\Windows NT\CurrentVersion", hKey) = ERROR_SUCCESS Then
            lDataLen = 164
            ReDim Preserve bDigitalProductID(lDataLen)
            If RegQueryValueEx(hKey, "DigitalProductId", 0&, REG_BINARY, bDigitalProductID(0), lDataLen) = ERROR_SUCCESS Then
                ReDim Preserve bProductKey(14)
                For ilByte = 52 To 66
                    bProductKey(ilByte - 52) = bDigitalProductID(ilByte)
                Next ilByte
            Else
                sGetXPCDKey = "无法读取注册信息"
                Exit Function
            End If
        Else
            sGetXPCDKey = "无法读取注册信息"
            Exit Function
        End If
        Dim bKeyChars(0 To 24) As Byte
        bKeyChars(0) = Asc("B")
        bKeyChars(1) = Asc("C")
        bKeyChars(2) = Asc("D")
        bKeyChars(3) = Asc("F")
        bKeyChars(4) = Asc("G")
        bKeyChars(5) = Asc("H")
        bKeyChars(6) = Asc("J")
        bKeyChars(7) = Asc("K")
        bKeyChars(8) = Asc("M")
        bKeyChars(9) = Asc("P")
        bKeyChars(10) = Asc("Q")
        bKeyChars(11) = Asc("R")
        bKeyChars(12) = Asc("T")
        bKeyChars(13) = Asc("V")
        bKeyChars(14) = Asc("W")
        bKeyChars(15) = Asc("X")
        bKeyChars(16) = Asc("Y")
        bKeyChars(17) = Asc("2")
        bKeyChars(18) = Asc("3")
        bKeyChars(19) = Asc("4")
        bKeyChars(20) = Asc("6")
        bKeyChars(21) = Asc("7")
        bKeyChars(22) = Asc("8")
        bKeyChars(23) = Asc("9")
        Dim nCur As Integer
        Dim sCDKey As String
        Dim ilKeyByte As Long
        Dim ilBit As Long    For ilByte = 24 To 0 Step -1
            nCur = 0
            For ilKeyByte = 14 To 0 Step -1
                nCur = nCur * 256 Xor bProductKey(ilKeyByte)
                bProductKey(ilKeyByte) = Int(nCur / 24)
                nCur = nCur Mod 24
            Next ilKeyByte
            sCDKey = Chr(bKeyChars(nCur)) & sCDKey
            If ilByte Mod 5 = 0 And ilByte <> 0 Then sCDKey = "-" & sCDKey
        Next ilByte
        sGetXPCDKey = sCDKey
    End Function
      

  4.   

    可以实现,我试过,是在一个国外网站上找到了。国内可能不好找到。。这里不上传文件,如果可以,我传一个示例上来了。我在XP的SP2平台试过,没有问题。建议大家都可以学学。PS: 大家可以结合微软发布的XP/2003系统CDKEY修改脚本做一个属于自己的专用CDKEY修改工具。(KEYFINDER这个软件应该大家有用过吧。其实它修改XP的序列号时只是调用微软提供的脚本而已。可以用UPX -D解压缩该文件,再用WINRAR打开就可以看到了。)
    想要看微软的VBS脚本,请查看: http://support.microsoft.com/kb/328874/zh-cn
    可以在VB中引用MICROSOFT WMI SCRIPTING V1.2 LIBRARY(有的系统的可能是V1.1的),然后,将微软的脚本改一下就可以了.如下:    Dim obj As SWbemObject
        Dim result
        On Error Resume Next
        Err.Clear
        Dim VOL_PROD_KEY As String
        VOL_PROD_KEY = UCase(Replace(Trim(Text1.Text), "-", ""))
        For Each obj In GetObject("winmgmts:{impersonationLevel=impersonate}").InstancesOf("win32_WindowsProductActivation")
            result = obj.SetProductKey(VOL_PROD_KEY)
            If Err.Number = 0 Then
                MsgBox "产品序列号已经成功更新", vbOKOnly + vbInformation, "更新成功"
            Else
                MsgBox "对不起,输入的序列号不正确,请重新输入!", vbOKOnly, "更新失败"
                Err.Clear
                Exit For
            End If
        Next
    '以上为主要部份的代码,自己引用的时候,可以进一步进行修改。加上错误判断等。注:以上内容引用自微软的脚本,可能对于部份盗版的系统不适用。并请不要用来非法途径。