2009年02月14日

icon WSH: Windowsのプロダクトキーを取得する

Windowsをインストールするときに、プロダクトキーの入力が必要になる。
プロダクトキーは英数字5桁×5の文字列からなる。
XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
こんな感じ。

再インストールする時、プロダクトキーが分からなくなっちゃったらインストールが出来ない。
レジストリかどっかに、プレーンテキストで書いてあればそこを参照すれば良いんだけど、エンコードされているんだよね。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
DigitalProductId
(REG_BINARY)
データの0x34〜0x42までがエンコードされたプロダクトキー。

エンコードされたレジストリのバイナリデータをデコードするWSHのコードを探していたんだけど、海外のサイトでやっと見つけた。

VisualBasicScript.com: Retrieve Windows Product Key

サンプルだとWMIからOS情報も取得しているけど、取り合えずOSのプロダクトキーだけ取れれば良いので、シンプルにしてみた。
実行結果はこれ↓

dispkey.gif

下のスクリプトをコピーして、DispPKey.vbsなどのファイル名で保存し、実行するだけ。
表示だけだから他に影響はないはず。

dispkey02.gif


' ##############################################################
' # #
' # VBScript to find the DigitalProductID for your #
' # Microsoft windows Installation and decode it to #
' # retrieve your windows Product Key #
' # #
' # ----------------------------------------------- #
' # #
' # Created by: Parabellum #
' # #
' ##############################################################
'
'[DispPKey.vbs] edited by tess
Option Explicit
'宣言
Dim strKeyPath, strValueName, strComputer, strProductKey, strFinalKey, strAll
Dim objReg, WshShell
Dim i, k, j
Dim iValues(), arrDPID, arrChars
Set WshShell = CreateObject("wscript.shell")
strComputer = "."
Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
const HKEY_LOCAL_MACHINE = &H80000002

'レジストリ取得
strKeyPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion"
strValueName = "DigitalProductId"
objReg.GetBinaryValue HKEY_LOCAL_MACHINE, strKeyPath, strValueName, iValues
arrDPID = Array()
For i = 52 to 66
ReDim Preserve arrDPID( UBound(arrDPID) + 1 )
arrDPID( UBound(arrDPID) ) = iValues(i)
Next

'展開
arrChars = Array("B","C","D","F","G","H","J","K","M","P","Q","R","T","V","W","X","Y","2","3","4","6","7","8","9")
For i = 24 To 0 Step -1
k = 0
For j = 14 To 0 Step -1
k = k * 256 Xor arrDPID(j)
arrDPID(j) = Int(k / 24)
k = k Mod 24
Next
strProductKey = arrChars(k) & strProductKey
If i Mod 5 = 0 And i <> 0 Then strProductKey = "-" & strProductKey
Next
strFinalKey = strProductKey

strAll = strAll & strFinalKey
msgBox strAll, , "Microsoft Windows ProductKey"

WScript.Quit


サンプルには、Windowsだけじゃなく、Officeのプロダクトキーを取得するコードもある。
興味があれば、サイトへ行って参照して欲しい。

THX! Parabellum.

§

他に配布されているツールだと、こんなのもあるらしい。

ITmedia Biz.ID:Windowsのプロダクトキーを表示する

posted by tess at 00:00 | Comment(1) | TrackBack(1) | ソフトウェア