1

Тема: WSH: Получение кода установки Windows

Иногда возникает ситуация, когда код установки Windows потерян, этикетку заляпали, оторвали на половину и т.п.  Как его узнать из "ещё работающей" ОС? В инете нашёл решение для Win8, логично предположил, что оно работает и для Win7. Недавно переставлял win7 "домашняя базовая", этикетка присутствовала, просто решил проверить работу скрипта... Установил, когда в третий раз не смог активировать, полез смотреть в этикетку, там совсем другой код...
Варианта 2:
1) скрипт работает не правильно;
2) "продавцы в магазине" не пользовались кодом установки того продукта, который официально продали (что конечно странно?!)
В запарке не проверил работу скрипта, после того как активировал Win с помощью кода на этикетке.
Скрипт вот такой:

Set WshShell = CreateObject("WScript.Shell")
regKey = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\"
DigitalProductId = WshShell.RegRead(regKey & "DigitalProductId")

Win8ProductName = "Windows Product Name: " & WshShell.RegRead(regKey & "ProductName") & vbNewLine
Win8ProductID = "Windows Product ID: " & WshShell.RegRead(regKey & "ProductID") & vbNewLine
Win8ProductKey = ConvertToKey(DigitalProductId)
strProductKey ="Windows 8 Key: " & Win8ProductKey 
Win8ProductID = Win8ProductName & Win8ProductID & strProductKey 

MsgBox(Win8ProductKey)
MsgBox(Win8ProductID)

Function ConvertToKey(regKey)
    Const KeyOffset = 52
    isWin8 = (regKey(66) \ 6) And 1
    regKey(66) = (regKey(66) And &HF7) Or ((isWin8 And 2) * 4)
    j = 24
    Chars = "BCDFGHJKMPQRTVWXY2346789"
    Do
        Cur = 0
        y = 14
        Do
            Cur = Cur * 256
            Cur = regKey(y + KeyOffset) + Cur
            regKey(y + KeyOffset) = (Cur \ 24)
            Cur = Cur Mod 24
            y = y -1
        Loop While y >= 0
        j = j -1
        winKeyOutput = Mid(Chars, Cur + 1, 1) & winKeyOutput
        Last = Cur
    Loop While j >= 0
    If (isWin8 = 1) Then
        keypart1 = Mid(winKeyOutput, 2, Last)
        insert = "N"
        winKeyOutput = Replace(winKeyOutput, keypart1, keypart1 & insert, 2, 1, 0)
        If Last = 0 Then winKeyOutput = insert & winKeyOutput
    End If
    a = Mid(winKeyOutput, 1, 5)
    b = Mid(winKeyOutput, 6, 5)
    c = Mid(winKeyOutput, 11, 5)
    d = Mid(winKeyOutput, 16, 5)
    e = Mid(winKeyOutput, 21, 5)
    ConvertToKey = a & "-" & b & "-" & c & "-" & d & "-" & e
End Function

Вопрос: он работать корректно должен? Может кто знает другой рецепт, для описанного случая?
Т.е. как получить код установки продукта из уже установленной ОС Win7

2

Re: WSH: Получение кода установки Windows

У меня код совпал с тем, что на этикетке. W7 HP 64.

3

Re: WSH: Получение кода установки Windows

понял, спасибо, значит вариант 2 был...

4

Re: WSH: Получение кода установки Windows

Строка: 3, Не удается открыть для чтения раздел реестра "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId".
Windows 7 HB, SP1, x64.

Щт Уккщк Куыгьу Туче
’ҐЄгй п Є®¤®ў п бва Ёж : 1251

5 (изменено: YMP, 2013-08-10 14:15:14)

Re: WSH: Получение кода установки Windows

У меня такая же ошибка, если скрипт выполняется 32-битным WScript.exe. В 32-битном разделе CurrentVersion нет параметра DigitalProductId.