liongodmien 发表于 2008-11-8 12:00:31

  感谢SANHEN这个应该是很古老时候出品的序列号修改作品,参照之后,终于将时下流行的VB序列号修改脚本改成了AU3的了,当时没想到用FOR。。。IN老是出错退出,现在终于好了...
  大家说到的那个显示的序列号与系统正在使用的序列号不同的情况,应该反向生成代码已经不适合现在的序列号情况吧.

Dim $VOL_PROD_KEY, $setKEY

$VOL_PROD_KEY=InputBox("Windows XP/2003 序列号更换工具","使用说明(OEM版无效):"&@CRLF&@CRLF&"  本程序将修改当前 Windows 的序列号。请选择一个微软授权正版Windows 的序列号,复制并粘贴到下面的输入框中。"&@CRLF&@CRLF&"输入序列号(默认为 XP VLK):","MRX3F-47B9T-2487J-KWKMF-RPWBY",'',300,200)

if $VOL_PROD_KEY="" then Exit

$setKEY = StringReplace($VOL_PROD_KEY,"-","")

$objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate}")
$colComputers = $objWMIService.InstancesOf ("win32_WindowsProductActivation")
;~ $strComputer = "."
;~ $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
;~ $colComputers = $objWMIService.ExecQuery("Select * from win32_WindowsProductActivation")
For $obj In $colComputers
        $obj.SetProductKey($setKEY)
        If @error = 0 Then
                MsgBox(64, "恭喜!!!", "您的 Windows CD-KEY 修改成功。请检查系统属性。"&@CRLF&@CRLF&"现在的序列号为:"&$VOL_PROD_KEY)
        Else
                MsgBox(16, "失败", "修改失败!请检查输入的 CD-KEY 是否与当前 Windows 版本相匹配。")
        EndIf
Next

eaglelin 发表于 2008-11-8 14:16:27

非常感谢!这个代码正确

cjl 发表于 2008-11-8 16:26:45

读取的也是错的....

sanhen 发表于 2008-11-8 16:49:11

读取的函数的确出错了,非常抱歉。我测试的是用以前的EXE读取的,但是以前的EXE读取是正确的。但是用脚本读取现在的XP SP3 ,2003 SP2确实出错了。

现在用WMI读取却正常,而以前的代码读取KEY不对的原因正在查找中。

sanhen 发表于 2008-11-8 17:27:35

找到原因了,是新版的问题。以下函数用3.2.11.10.1版来运行读取是正常的。
而试了几个新版读取出的KEY都是不正确了的。这段时间没留意过新版,不知道更新了什么东西,而导致函数出错了。奇怪中,以下函数用到的都是内置的东西,而居然新版返回的结果有问题。。。


Func DecodeProductKey($BinaryDPID)
Local $bKey
Local $sKey
Local $Digits
Local $Value = 0
Local $hi = 0
Local $n = 0
Local $i = 0
Local $dlen = 29
Local $slen = 15
Local $Result

$Digits = StringSplit("BCDFGHJKMPQRTVWXY2346789", "")
$BinaryDPID = StringMid($BinaryDPID, 105, 30)
For $i = 1 To 29 Step 2
$bKey = Dec(StringMid($BinaryDPID, $i, 2))
Next
For $i = $dlen - 1 To 0 Step - 1
If Mod(($i + 1), 6) = 0 Then
$sKey[$i] = "-"
Else
$hi = 0
For $n = $slen - 1 To 0 Step - 1
$Value = BitOR(BitShift($hi, -8), $bKey[$n])
$bKey[$n] = Int($Value / 24)
$hi = Mod($Value, 24)
Next
$sKey[$i] = $Digits[$hi + 1]
EndIf
Next
For $i = 0 To 28
$Result = $Result & $sKey[$i]
Next
Return $Result
EndFunc


redapple2008 发表于 2008-11-8 19:51:51

谢谢你们了。感谢了。

cjl 发表于 2008-11-8 19:56:08

原帖由 redapple2008 于 2008-11-8 19:51 发表 http://www.autoitx.com/images/common/back.gif
谢谢你们了。感谢了。

你的问题解决了?
用个老点的版本编译,代码是正确的,是新版的问题

顽固不化 发表于 2009-2-2 11:21:00

3.3.0.0.1,,返回CDkey是错的。新版有问题?
页: 1 [2]
查看完整版本: 有没有修改XP序列号的源码 啊!?