urie Posted August 28, 2011 Share Posted August 28, 2011 Thats the issue lots that we get have damaged / unreadable labels and no restore discs so a way to get the right key would be real usefullSome infoDefinition of OEM:The term, OEM (original equipment manufacturer) refers to companies that make products for others to repackage and sell. Resellers buy OEM products in bulk, minus the costly retail packaging that comes with individually sold units. The product itself is essentially the same as its more expensive, retail-packaged sibling. OEM products are used in many industries, but are perhaps most prevalent in electronics.Generally, dealers of OEM products add something of value before reselling the merchandise. An OEM vendor that does this is known as a "value added reseller" (VAR). A VAR might build components, sub-systems, or systems from quality OEM parts. OEM goods allow VARs a wide range of creative marketing choices, which permits smaller dealers to be competitive in the marketplace.OEM software will have different product numbers than retail packages, and support may be provided by the VAR, rather than the maker of the software. Functionally, OEM and retail versions of software should be essentially the same.Two kinds of OEM Product Keys:OEM SLP Keys:* OEM SLP (System-Locked Pre-installation) keys are only issued to the big manufacturers such as Dell, Asus, Sony, etc.* These are the only keys that are able to bypass activation that is, perform offline activation without contacting Microsoft.* They will work with any OEM SLP system, regardless of the OEM system's brand i.e. Product Keys are not brand specific.OEM NONSLP Keys:* Similar to Retail, but distributed and supported by an OEM. Needs activation by phone or online and they are not brand specific. .OEM COA Keys:* OEM COA keys (Certificate of Authentication) are regular OEM keys that require activation, either by phone or online and they are not brand specific.(you will find the sticker with the key underneath you Laptop or on the side of you PC)* These keys will work in general same as Retail or Upgrade keys and can be used only once.OEM SLP Product Keys activation:* You need is an OEM SLP Product Key that matches the version of Windows Vista you have installed or are going to install.(Home Basic, Home Premium, Business or Ultimate), plus the OEM certificate matching the SLIC table* The OEM SLP Product Key does not have to match the OEM-brand certificate nor the OEM-brand BIOS ACPI_SLIC information.(The only ones that need to match are the OEM-brand certificate and the OEM-brand BIOS ACPI_SLIC information.)* SLP activation doesn't work with Vista Release Candidates or Vista Beta versions. Only the final version (RTM, Retail or OEM).i.e.: A+B+C = Vista Activated OfflineOEM SLP Key + OEM Certificate + Full SLIC Table = Vista Activated OfflineIf one (A,B or C) is missing, activation will fail! Link to comment Share on other sites More sharing options...
Nunos Posted August 28, 2011 Share Posted August 28, 2011 Thank you Valuater for the explanation and example And thank you to the creators of this script it works great here on WIndows 7 Business (x86) and (x64). Link to comment Share on other sites More sharing options...
NDog Posted September 12, 2011 Share Posted September 12, 2011 I'm using this on fresh Windows 7 Professional SP1 MAK activated. Windows Key returns BBBBB-BBBBB-BBBBB-BBBBB-BBBBB and the Windows Default key returns HYF8J-CVRMY-...., which is the default microsoft key you can use for 31 days trial. Im writing a script to backup the token and use for offline reactivation on machines in some of my sites for reimaging purposes. (proxy stuff is a headache) Has anyone else here had success with this and Windows 7 Pro MAK activated? If it is not possible then I will have to embed the key for each site into the autoit script and compile an exe for each site (not secure) or backup the registy key section for each machine (untested but may work). I prefer to return Windows Key, but then if that is not possible I have to work around that..... Link to comment Share on other sites More sharing options...
JFX Posted September 13, 2011 Author Share Posted September 13, 2011 Sorry MAK can't be recovered with this script. unsure where and how key is stored in MAK activation. Link to comment Share on other sites More sharing options...
Chimaera Posted October 10, 2011 Share Posted October 10, 2011 (edited) I'm curious can this be altered to read a drive plugged in and external drive? On another program ive used it had a load hive option and you gave the external drive location and the windows folder and it read the key from that Common scenario for us licence key is worn so not usable, hard drive wont boot OS so cant recover that way, but drive is accessible in a caddy/external drive so reading the hive that way would be very usefull sometimes to get the key back.I don't know much about registry so i wouldn't know how to proceed loading another registry hive. Any thoughts? EDIT found this, not sure if it helps though as this is doing it manuallyLoad the hive.To load Local_machine hive,Open regedit > Click "HKEY_LOCAL_MACHINE"File > Load Hive > Browse to the fileGive it a name > then do what yoy want to do with itClick on the loaded hive > File > Unload Hive To load a Users hive,Open regedit > Click "HKEY_USERS"File > Load Hive > Browse to the fileGive it a name > then do what yoy want to do with itClick on the loaded hive > File > Unload Hive Edited October 10, 2011 by Chimaera If Ive just helped you ... miracles do happen. Chimaera CopyRobo() * Hidden Admin Account Enabler * Software Location From Registry * Find Display Resolution * _ChangeServices() Link to comment Share on other sites More sharing options...
storme Posted October 11, 2011 Share Posted October 11, 2011 On another program ive used it had a load hive option and you gave the external drive location and the windows folder and it read the key from that Common scenario for us licence key is worn so not usable, hard drive wont boot OS so cant recover that way, but drive is accessible in a caddy/external drive so reading the hive that way would be very usefull sometimes to get the key back.I don't know much about registry so i wouldn't know how to proceed loading another registry hive. Any thoughts?I load an OLD program called ERUNT onto all my computers (works on XP to Win7).It backs up the registry and even leaves a restore program in each of backup folders.One little trouble is UAC stops it working completly (i.e NO UAC Prompts at all just an error from ERUNT)In your scenario you would boot with a winpe or similar, run the restore program in the directory of the most recent backup and you have the registry back in place. It's saved a lot of my systems from being reinstalled for a simple registry glitch. Hope you have a great day!John Morrison Some of my small contributions to AutoIt Browse for Folder Dialog - Automation SysTreeView32 | FileHippo Download and/or retrieve program information | Get installedpath from uninstall key in registry | RoboCopy function John Morrison aka Storm-E Link to comment Share on other sites More sharing options...
Chimaera Posted October 11, 2011 Share Posted October 11, 2011 (edited) The problem for me atm is i cant boot the pc at all the drive is that twitchy, but if you chuck it in a caddy a different system OS is able to access the drive albeit not very well. I just wondered if it was possible to have the ability to point to the registry hive on the damaged drive using the different OS and get the key from the damaged drive using the earlier code. Well i know its possible, its just how. Edited October 11, 2011 by Chimaera If Ive just helped you ... miracles do happen. Chimaera CopyRobo() * Hidden Admin Account Enabler * Software Location From Registry * Find Display Resolution * _ChangeServices() Link to comment Share on other sites More sharing options...
storme Posted October 11, 2011 Share Posted October 11, 2011 The problem for me atm is i cant boot the pc at all the drive is that twitchy, but if you chuck it in a caddy a different system OS is able to access the Sorry I missed that it was a current problem well maybe for next time Erunt can help. You can use REGEDT32 to mount external registry (I've never done it myself, but here is what i've found)(File -> Load Hive Check the help file for full details. User registry HKEY_CURRENT_USER c:\documents and settings\{username}\NTUSER.DATOther registry \windows\system32\config\????.data Good LuckJohn Morrison Some of my small contributions to AutoIt Browse for Folder Dialog - Automation SysTreeView32 | FileHippo Download and/or retrieve program information | Get installedpath from uninstall key in registry | RoboCopy function John Morrison aka Storm-E Link to comment Share on other sites More sharing options...
Chimaera Posted October 11, 2011 Share Posted October 11, 2011 similar to my edit here Im afraid Erunt wont help m8 because customers never bring the machines in until it has gone pear shaped and then as we know its tooo late If Ive just helped you ... miracles do happen. Chimaera CopyRobo() * Hidden Admin Account Enabler * Software Location From Registry * Find Display Resolution * _ChangeServices() Link to comment Share on other sites More sharing options...
JFX Posted October 11, 2011 Author Share Posted October 11, 2011 Try this to retrieve key from an offline windows expandcollapse popup#include <Array.au3> ;Local Windows ;~ $keys = _DecodeProductKeys() ;Offline Windows $var = FileSelectFolder("Choose an offline Windows folder.", "") If @error Then Exit $keys = _DecodeProductKeys($var) If @error Then MsgBox(16, 'Error', $keys) Else _ArrayDisplay($keys, "Retrieved Windows Keys") EndIf Func _DecodeProductKeys($Offline = False) Local $Array[9][2], $BinaryDPID, $KeyPos = 0x34 * 2 + 3, $RegKey, $i, $var, $unLoadHive = 0, $OSArch IF Not $Offline Then $Software = 'SOFTWARE' $OSArch = @OSArch Else IF Not FileExists($Offline & '\system32\config\software') Then Return SetError(1, 0, 'Offline Windows invalid!') IF (ShellExecuteWait('reg', 'load HKLM\_Off_SOFTWARE ' & $Offline & '\system32\config\software', '', '', @SW_HIDE)) = 0 Then $unLoadHive = 1 Else Return SetError(2, 0, 'Could not load Offline Windows registry!') EndIf $Software = '_Off_SOFTWARE' IF FileExists($Offline & '\syswow64\kernel32.dll') Then $OSArch = 'x64' EndIf $Array[0][0] = 'Windows Key' $BinaryDPID = RegRead('HKLM64\'& $Software &'\Microsoft\Windows NT\CurrentVersion', 'DigitalProductId') $Array[0][1] = _Base24_Decode(StringMid($BinaryDPID, $KeyPos)) $Array[1][0] = 'Windows Key 4' $BinaryDPID = RegRead('HKLM64\'& $Software &'\Microsoft\Windows NT\CurrentVersion', 'DigitalProductId4') $Array[1][1] = _Base24_Decode(StringMid($BinaryDPID, 0x328 * 2 + 3)) $Array[2][0] = 'Windows Default' $BinaryDPID = RegRead('HKLM64\'& $Software &'\Microsoft\Windows NT\CurrentVersion\DefaultProductKey', 'DigitalProductId') $Array[2][1] = _Base24_Decode(StringMid($BinaryDPID, $KeyPos)) $Array[3][0] = 'Windows Default 4' $BinaryDPID = RegRead('HKLM64\'& $Software &'\Microsoft\Windows NT\CurrentVersion\DefaultProductKey', 'DigitalProductId4') $Array[3][1] = _Base24_Decode(StringMid($BinaryDPID, 0x328 * 2 + 3)) $Array[4][0] = 'Office XP Key' $RegKey = 'HKLM\'& $Software &'\Microsoft\Office\10.0\Registration' IF $OSArch = 'x64' Then $RegKey = 'HKLM64\'& $Software &'\Wow6432Node\Microsoft\Office\10.0\Registration' $BinaryDPID = '' For $i= 1 to 100 $var = RegEnumKey($RegKey, $i) If @error <> 0 then ExitLoop $BinaryDPID = RegRead($RegKey & '\' & $var, 'DigitalProductId') IF Not @error Then ExitLoop Next $Array[4][1] = _Base24_Decode(StringMid($BinaryDPID, $KeyPos)) $Array[5][0] = 'Office 2003 Key' $RegKey = 'HKLM\'& $Software &'\Microsoft\Office\11.0\Registration' IF $OSArch = 'x64' Then $RegKey = 'HKLM64\'& $Software &'\Wow6432Node\Microsoft\Office\11.0\Registration' $BinaryDPID = '' For $i= 1 to 100 $var = RegEnumKey($RegKey, $i) If @error <> 0 then ExitLoop $BinaryDPID = RegRead($RegKey & '\' & $var, 'DigitalProductId') IF Not @error Then ExitLoop Next $Array[5][1] = _Base24_Decode(StringMid($BinaryDPID, $KeyPos)) $Array[6][0] = 'Office 2007 Key' $RegKey = 'HKLM\'& $Software &'\Microsoft\Office\12.0\Registration' IF $OSArch = 'x64' Then $RegKey = 'HKLM64\'& $Software &'\Wow6432Node\Microsoft\Office\12.0\Registration' $BinaryDPID = '' For $i= 1 to 100 $var = RegEnumKey($RegKey, $i) If @error <> 0 then ExitLoop $BinaryDPID = RegRead($RegKey & '\' & $var, 'DigitalProductId') IF Not @error Then ExitLoop Next $Array[6][1] = _Base24_Decode(StringMid($BinaryDPID, $KeyPos)) $Array[7][0] = 'Office 2010 x86 Key' $RegKey = 'HKLM\'& $Software &'\Microsoft\Office\14.0\Registration' IF $OSArch = 'x64' Then $RegKey = 'HKLM64\'& $Software &'\Wow6432Node\Microsoft\Office\14.0\Registration' $BinaryDPID = '' For $i= 1 to 100 $var = RegEnumKey($RegKey, $i) If @error <> 0 then ExitLoop $BinaryDPID = RegRead($RegKey & '\' & $var, 'DigitalProductId') IF Not @error Then ExitLoop Next $Array[7][1] = _Base24_Decode(StringMid($BinaryDPID, 0x328 * 2 + 3)) $Array[8][0] = 'Office 2010 x64 Key' $RegKey = 'HKLM64\'& $Software &'\Microsoft\Office\14.0\Registration' IF $OSArch = 'x64' Then $RegKey = '' $BinaryDPID = '' For $i= 1 to 100 $var = RegEnumKey($RegKey, $i) If @error <> 0 then ExitLoop $BinaryDPID = RegRead($RegKey & '\' & $var, 'DigitalProductId') IF Not @error Then ExitLoop Next $Array[8][1] = _Base24_Decode(StringMid($BinaryDPID, 0x328 * 2 + 3)) IF $unLoadHive Then ShellExecuteWait('reg', 'unload HKLM\_Off_SOFTWARE', '', '', @SW_HIDE) Return $Array EndFunc Func _Base24_Decode($BinaryDPID) Local $bKey[15], $sKey[29], $Digits[24], $Value = 0, $hi = 0, $n = 0, $i = 0, $dlen = 29, $slen = 15, $Result $Digits = StringSplit("BCDFGHJKMPQRTVWXY2346789", "") For $i = 1 To 29 Step 2 $bKey[Int($i / 2)] = 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 IF $Result = "BBBBB-BBBBB-BBBBB-BBBBB-BBBBB" Then $Result = "" Return $Result EndFunc Link to comment Share on other sites More sharing options...
Chimaera Posted October 12, 2011 Share Posted October 12, 2011 Thanks m8 ill try it at work tommoz and report back If Ive just helped you ... miracles do happen. Chimaera CopyRobo() * Hidden Admin Account Enabler * Software Location From Registry * Find Display Resolution * _ChangeServices() Link to comment Share on other sites More sharing options...
NDog Posted September 30, 2012 Share Posted September 30, 2012 I've modified JFX offline version. This is for use in a WINPE environment. If you are using a windows 64 PE environment you must encode this to 64bit. Therefore the Office 2010 detection needed to be slightly modified. Also in some versions of PE FileSelectFolder does not always work properly so I have set it to c:, but someone may want to improve it further.expandcollapse popup#include ;Local Windows ;~ $keys = _DecodeProductKeys() ;Offline Windows $var = FileSelectFolder("Choose an offline Windows folder.", "C:",4) If @error Then Exit $keys = _DecodeProductKeys($var) If @error Then MsgBox(16, 'Error', $keys) Else _ArrayDisplay($keys, "Retrieved Windows Keys") EndIf Func _DecodeProductKeys($Offline = False) Local $Array[9][2], $BinaryDPID, $KeyPos = 0x34 * 2 + 3, $RegKey, $i, $var, $unLoadHive = 0, $OSArch IF Not $Offline Then $Software = 'SOFTWARE' $OSArch = @OSArch Else IF Not FileExists($Offline & '\system32\config\software') Then Return SetError(1, 0, 'Offline Windows invalid!') IF (ShellExecuteWait('reg', 'load HKLM\_Off_SOFTWARE ' & $Offline & '\system32\config\software', '', '', @SW_HIDE)) = 0 Then $unLoadHive = 1 Else Return SetError(2, 0, 'Could not load Offline Windows registry!') EndIf $Software = '_Off_SOFTWARE' IF FileExists($Offline & '\syswow64\kernel32.dll') Then $OSArch = 'x64' EndIf $Array[0][0] = 'Windows Key' $BinaryDPID = RegRead('HKLM64\'& $Software &'\Microsoft\Windows NT\CurrentVersion', 'DigitalProductId') $Array[0][1] = _Base24_Decode(StringMid($BinaryDPID, $KeyPos)) $Array[1][0] = 'Windows Key 4' $BinaryDPID = RegRead('HKLM64\'& $Software &'\Microsoft\Windows NT\CurrentVersion', 'DigitalProductId4') $Array[1][1] = _Base24_Decode(StringMid($BinaryDPID, 0x328 * 2 + 3)) $Array[2][0] = 'Windows Default' $BinaryDPID = RegRead('HKLM64\'& $Software &'\Microsoft\Windows NT\CurrentVersion\DefaultProductKey', 'DigitalProductId') $Array[2][1] = _Base24_Decode(StringMid($BinaryDPID, $KeyPos)) $Array[3][0] = 'Windows Default 4' $BinaryDPID = RegRead('HKLM64\'& $Software &'\Microsoft\Windows NT\CurrentVersion\DefaultProductKey', 'DigitalProductId4') $Array[3][1] = _Base24_Decode(StringMid($BinaryDPID, 0x328 * 2 + 3)) $Array[4][0] = 'Office XP Key' $RegKey = 'HKLM\'& $Software &'\Microsoft\Office\10.0\Registration' IF $OSArch = 'x64' Then $RegKey = 'HKLM64\'& $Software &'\Wow6432Node\Microsoft\Office\10.0\Registration' $BinaryDPID = '' For $i= 1 to 100 $var = RegEnumKey($RegKey, $i) If @error <> 0 then ExitLoop $BinaryDPID = RegRead($RegKey & '\' & $var, 'DigitalProductId') IF Not @error Then ExitLoop Next $Array[4][1] = _Base24_Decode(StringMid($BinaryDPID, $KeyPos)) $Array[5][0] = 'Office 2003 Key' $RegKey = 'HKLM\'& $Software &'\Microsoft\Office\11.0\Registration' IF $OSArch = 'x64' Then $RegKey = 'HKLM64\'& $Software &'\Wow6432Node\Microsoft\Office\11.0\Registration' $BinaryDPID = '' For $i= 1 to 100 $var = RegEnumKey($RegKey, $i) If @error <> 0 then ExitLoop $BinaryDPID = RegRead($RegKey & '\' & $var, 'DigitalProductId') IF Not @error Then ExitLoop Next $Array[5][1] = _Base24_Decode(StringMid($BinaryDPID, $KeyPos)) $Array[6][0] = 'Office 2007 Key' $RegKey = 'HKLM\'& $Software &'\Microsoft\Office\12.0\Registration' IF $OSArch = 'x64' Then $RegKey = 'HKLM64\'& $Software &'\Wow6432Node\Microsoft\Office\12.0\Registration' $BinaryDPID = '' For $i= 1 to 100 $var = RegEnumKey($RegKey, $i) If @error <> 0 then ExitLoop $BinaryDPID = RegRead($RegKey & '\' & $var, 'DigitalProductId') IF Not @error Then ExitLoop Next $Array[6][1] = _Base24_Decode(StringMid($BinaryDPID, $KeyPos)) $Array[7][0] = 'Office 2010 HKLM Key' $RegKey = 'HKLM64\'& $Software &'\Microsoft\Office\14.0\Registration' $BinaryDPID = '' For $i= 1 to 100 $var = RegEnumKey($RegKey, $i) If @error <> 0 then ExitLoop $BinaryDPID = RegRead($RegKey & '\' & $var, 'DigitalProductId') IF Not @error Then ExitLoop Next $Array[7][1] = _Base24_Decode(StringMid($BinaryDPID, 0x328 * 2 + 3)) $Array[8][0] = 'Office 2010 HKLM Wow6432Node Key' $RegKey = 'HKLM64\'& $Software &'\Wow6432Node\Microsoft\Office\14.0\Registration' $BinaryDPID = '' For $i= 1 to 100 $var = RegEnumKey($RegKey, $i) If @error <> 0 then ExitLoop $BinaryDPID = RegRead($RegKey & '\' & $var, 'DigitalProductId') IF Not @error Then ExitLoop Next $Array[8][1] = _Base24_Decode(StringMid($BinaryDPID, 0x328 * 2 + 3)) IF $unLoadHive Then ShellExecuteWait('reg', 'unload HKLM\_Off_SOFTWARE', '', '', @SW_HIDE) Return $Array EndFunc Func _Base24_Decode($BinaryDPID) Local $bKey[15], $sKey[29], $Digits[24], $Value = 0, $hi = 0, $n = 0, $i = 0, $dlen = 29, $slen = 15, $Result $Digits = StringSplit("BCDFGHJKMPQRTVWXY2346789", "") For $i = 1 To 29 Step 2 $bKey[Int($i / 2)] = 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 IF $Result = "BBBBB-BBBBB-BBBBB-BBBBB-BBBBB" Then $Result = "" Return $Result EndFunc Link to comment Share on other sites More sharing options...
PixelPixPanreyes Posted December 24, 2012 Share Posted December 24, 2012 Hello. Has anyone figured out how to also support Windows 8 key? I got this VBS code from mydigitallife.info but I don't know how to convert it to AutoIT! Set WshShell = CreateObject("WScript.Shell") MsgBox ConvertToKey(WshShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId")) Function ConvertToKey(Key) Const KeyOffset = 52 isWin8 = (Key(66) \ 6) And 1 Key(66) = (Key(66) And &HF7) Or ((isWin8 And 2) * 4) i = 24 Chars = "BCDFGHJKMPQRTVWXY2346789" Do Cur = 0 X = 14 Do Cur = Cur * 256 Cur = Key(X + KeyOffset) + Cur Key(X + KeyOffset) = (Cur \ 24) Cur = Cur Mod 24 X = X -1 Loop While X >= 0 i = i -1 KeyOutput = Mid(Chars, Cur + 1, 1) & KeyOutput Last = Cur Loop While i >= 0 If (isWin8 = 1) Then keypart1 = Mid(KeyOutput, 2, Last) insert = "N" KeyOutput = Replace(KeyOutput, keypart1, keypart1 & insert, 2, 1, 0) If Last = 0 Then KeyOutput = insert & KeyOutput End If a = Mid(KeyOutput, 1, 5) b = Mid(KeyOutput, 6, 5) c = Mid(KeyOutput, 11, 5) d = Mid(KeyOutput, 16, 5) e = Mid(KeyOutput, 21, 5) ConvertToKey = a & "-" & b & "-" & c & "-" & d & "-" & e End Function I'm a bad programmer and I should feel bad Link to comment Share on other sites More sharing options...
UEZ Posted December 24, 2012 Share Posted December 24, 2012 (edited) Try this expandcollapse popup;converted by UEZ 2012 MsgBox(0, "Windows Key", "Your " & @OSVersion & " key is : " & GetWindowsProductKey()) Func GetWindowsProductKey() Local Const $iKeyOffset = 52 Local $sHKLM = "HKLM", $i If @OSArch = "X64" Then $sHKLM &= "64" Local $bKey = RegRead($sHKLM & "\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "DigitalProductId") Local $aKeys[BinaryLen($bKey)] For $i = 0 To UBound($aKeys) - 1 $aKeys[$i] = Int(BinaryMid($bKey, $i + 1, 1)) Next Local Const $isWin8 = BitAND(Int($aKeys[66]) / 6, 1) $aKeys[66] = BitOR(BitAND($aKeys[66], 0xF7), BitAND($isWin8, 2) * 4) $i = 24 Local $sChars = "BCDFGHJKMPQRTVWXY2346789", $iCur, $iX, $sKeyOutput, $iLast While $i > -1 $iCur = 0 $iX = 14 While $iX > -1 $iCur *= 256 $iCur = $aKeys[$iX + $iKeyOffset] + $iCur $aKeys[$iX + $iKeyOffset] = Int($iCur / 24) $iCur = Mod($iCur, 24) $iX -= 1 WEnd $i -= 1 $sKeyOutput = StringMid($sChars, $iCur + 1, 1) & $sKeyOutput $iLast = $iCur WEnd If $isWin8 Then Local Const $sKeyPart1 = StringMid($sKeyOutput, 2, $iLast) Local Const $sInsert = "N" $sKeyOutput = StringReplace(StringTrimLeft($sKeyOutput, 1), $sKeyPart1, $sKeyPart1 & $sInsert, 1) If Not $iLast Then $sKeyOutput = $sInsert & $sKeyOutput EndIf Return StringRegExpReplace($sKeyOutput, '(\w{5})(\w{5})(\w{5})(\w{5})(\w{5})', '\1-\2-\3-\4-\5') ;~ Return StringMid($sKeyOutput, 1, 5) & "-" & _ ;~ StringMid($sKeyOutput, 6, 5) & "-" & _ ;~ StringMid($sKeyOutput, 11, 5) & "-" & _ ;~ StringMid($sKeyOutput, 16, 5) & "-" & _ ;~ StringMid($sKeyOutput, 21, 5) EndFunc #cs Set WshShell = CreateObject("WScript.Shell") MsgBox ConvertToKey(WshShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId")) Function ConvertToKey(Key) Const KeyOffset = 52 isWin8 = (Key(66) \ 6) And 1 Key(66) = (Key(66) And &HF7) Or ((isWin8 And 2) * 4) i = 24 Chars = "BCDFGHJKMPQRTVWXY2346789" Do Cur = 0 X = 14 Do Cur = Cur * 256 Cur = Key(X + KeyOffset) + Cur Key(X + KeyOffset) = (Cur \ 24) Cur = Cur Mod 24 X = X -1 Loop While X >= 0 i = i -1 KeyOutput = Mid(Chars, Cur + 1, 1) & KeyOutput Last = Cur Loop While i >= 0 If (isWin8 = 1) Then keypart1 = Mid(KeyOutput, 2, Last) insert = "N" KeyOutput = Replace(KeyOutput, keypart1, keypart1 & insert, 2, 1, 0) If Last = 0 Then KeyOutput = insert & KeyOutput End If a = Mid(KeyOutput, 1, 5) b = Mid(KeyOutput, 6, 5) c = Mid(KeyOutput, 11, 5) d = Mid(KeyOutput, 16, 5) e = Mid(KeyOutput, 21, 5) ConvertToKey = a & "-" & b & "-" & c & "-" & d & "-" & e End Function #ce and let me know whether it works properly. Br, UEZ Edited December 26, 2012 by UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
guinness Posted December 24, 2012 Share Posted December 24, 2012 Nice conversion UEZ. UDF List: _AdapterConnections() • _AlwaysRun() • _AppMon() • _AppMonEx() • _ArrayFilter/_ArrayReduce • _BinaryBin() • _CheckMsgBox() • _CmdLineRaw() • _ContextMenu() • _ConvertLHWebColor()/_ConvertSHWebColor() • _DesktopDimensions() • _DisplayPassword() • _DotNet_Load()/_DotNet_Unload() • _Fibonacci() • _FileCompare() • _FileCompareContents() • _FileNameByHandle() • _FilePrefix/SRE() • _FindInFile() • _GetBackgroundColor()/_SetBackgroundColor() • _GetConrolID() • _GetCtrlClass() • _GetDirectoryFormat() • _GetDriveMediaType() • _GetFilename()/_GetFilenameExt() • _GetHardwareID() • _GetIP() • _GetIP_Country() • _GetOSLanguage() • _GetSavedSource() • _GetStringSize() • _GetSystemPaths() • _GetURLImage() • _GIFImage() • _GoogleWeather() • _GUICtrlCreateGroup() • _GUICtrlListBox_CreateArray() • _GUICtrlListView_CreateArray() • _GUICtrlListView_SaveCSV() • _GUICtrlListView_SaveHTML() • _GUICtrlListView_SaveTxt() • _GUICtrlListView_SaveXML() • _GUICtrlMenu_Recent() • _GUICtrlMenu_SetItemImage() • _GUICtrlTreeView_CreateArray() • _GUIDisable() • _GUIImageList_SetIconFromHandle() • _GUIRegisterMsg() • _GUISetIcon() • _Icon_Clear()/_Icon_Set() • _IdleTime() • _InetGet() • _InetGetGUI() • _InetGetProgress() • _IPDetails() • _IsFileOlder() • _IsGUID() • _IsHex() • _IsPalindrome() • _IsRegKey() • _IsStringRegExp() • _IsSystemDrive() • _IsUPX() • _IsValidType() • _IsWebColor() • _Language() • _Log() • _MicrosoftInternetConnectivity() • _MSDNDataType() • _PathFull/GetRelative/Split() • _PathSplitEx() • _PrintFromArray() • _ProgressSetMarquee() • _ReDim() • _RockPaperScissors()/_RockPaperScissorsLizardSpock() • _ScrollingCredits • _SelfDelete() • _SelfRename() • _SelfUpdate() • _SendTo() • _ShellAll() • _ShellFile() • _ShellFolder() • _SingletonHWID() • _SingletonPID() • _Startup() • _StringCompact() • _StringIsValid() • _StringRegExpMetaCharacters() • _StringReplaceWholeWord() • _StringStripChars() • _Temperature() • _TrialPeriod() • _UKToUSDate()/_USToUKDate() • _WinAPI_Create_CTL_CODE() • _WinAPI_CreateGUID() • _WMIDateStringToDate()/_DateToWMIDateString() • Au3 script parsing • AutoIt Search • AutoIt3 Portable • AutoIt3WrapperToPragma • AutoItWinGetTitle()/AutoItWinSetTitle() • Coding • DirToHTML5 • FileInstallr • FileReadLastChars() • GeoIP database • GUI - Only Close Button • GUI Examples • GUICtrlDeleteImage() • GUICtrlGetBkColor() • GUICtrlGetStyle() • GUIEvents • GUIGetBkColor() • Int_Parse() & Int_TryParse() • IsISBN() • LockFile() • Mapping CtrlIDs • OOP in AutoIt • ParseHeadersToSciTE() • PasswordValid • PasteBin • Posts Per Day • PreExpand • Protect Globals • Queue() • Resource Update • ResourcesEx • SciTE Jump • Settings INI • SHELLHOOK • Shunting-Yard • Signature Creator • Stack() • Stopwatch() • StringAddLF()/StringStripLF() • StringEOLToCRLF() • VSCROLL • WM_COPYDATA • More Examples... Updated: 22/04/2018 Link to comment Share on other sites More sharing options...
guinness Posted December 24, 2012 Share Posted December 24, 2012 Maybe that StringMid return pattern could be replaced with this >> Return StringRegExpReplace($sKeyOutput, '(\w{5})(\w{5})(\w{5})(\w{5})(\w{5})', '\1-\2-\3-\4-\5') UDF List: _AdapterConnections() • _AlwaysRun() • _AppMon() • _AppMonEx() • _ArrayFilter/_ArrayReduce • _BinaryBin() • _CheckMsgBox() • _CmdLineRaw() • _ContextMenu() • _ConvertLHWebColor()/_ConvertSHWebColor() • _DesktopDimensions() • _DisplayPassword() • _DotNet_Load()/_DotNet_Unload() • _Fibonacci() • _FileCompare() • _FileCompareContents() • _FileNameByHandle() • _FilePrefix/SRE() • _FindInFile() • _GetBackgroundColor()/_SetBackgroundColor() • _GetConrolID() • _GetCtrlClass() • _GetDirectoryFormat() • _GetDriveMediaType() • _GetFilename()/_GetFilenameExt() • _GetHardwareID() • _GetIP() • _GetIP_Country() • _GetOSLanguage() • _GetSavedSource() • _GetStringSize() • _GetSystemPaths() • _GetURLImage() • _GIFImage() • _GoogleWeather() • _GUICtrlCreateGroup() • _GUICtrlListBox_CreateArray() • _GUICtrlListView_CreateArray() • _GUICtrlListView_SaveCSV() • _GUICtrlListView_SaveHTML() • _GUICtrlListView_SaveTxt() • _GUICtrlListView_SaveXML() • _GUICtrlMenu_Recent() • _GUICtrlMenu_SetItemImage() • _GUICtrlTreeView_CreateArray() • _GUIDisable() • _GUIImageList_SetIconFromHandle() • _GUIRegisterMsg() • _GUISetIcon() • _Icon_Clear()/_Icon_Set() • _IdleTime() • _InetGet() • _InetGetGUI() • _InetGetProgress() • _IPDetails() • _IsFileOlder() • _IsGUID() • _IsHex() • _IsPalindrome() • _IsRegKey() • _IsStringRegExp() • _IsSystemDrive() • _IsUPX() • _IsValidType() • _IsWebColor() • _Language() • _Log() • _MicrosoftInternetConnectivity() • _MSDNDataType() • _PathFull/GetRelative/Split() • _PathSplitEx() • _PrintFromArray() • _ProgressSetMarquee() • _ReDim() • _RockPaperScissors()/_RockPaperScissorsLizardSpock() • _ScrollingCredits • _SelfDelete() • _SelfRename() • _SelfUpdate() • _SendTo() • _ShellAll() • _ShellFile() • _ShellFolder() • _SingletonHWID() • _SingletonPID() • _Startup() • _StringCompact() • _StringIsValid() • _StringRegExpMetaCharacters() • _StringReplaceWholeWord() • _StringStripChars() • _Temperature() • _TrialPeriod() • _UKToUSDate()/_USToUKDate() • _WinAPI_Create_CTL_CODE() • _WinAPI_CreateGUID() • _WMIDateStringToDate()/_DateToWMIDateString() • Au3 script parsing • AutoIt Search • AutoIt3 Portable • AutoIt3WrapperToPragma • AutoItWinGetTitle()/AutoItWinSetTitle() • Coding • DirToHTML5 • FileInstallr • FileReadLastChars() • GeoIP database • GUI - Only Close Button • GUI Examples • GUICtrlDeleteImage() • GUICtrlGetBkColor() • GUICtrlGetStyle() • GUIEvents • GUIGetBkColor() • Int_Parse() & Int_TryParse() • IsISBN() • LockFile() • Mapping CtrlIDs • OOP in AutoIt • ParseHeadersToSciTE() • PasswordValid • PasteBin • Posts Per Day • PreExpand • Protect Globals • Queue() • Resource Update • ResourcesEx • SciTE Jump • Settings INI • SHELLHOOK • Shunting-Yard • Signature Creator • Stack() • Stopwatch() • StringAddLF()/StringStripLF() • StringEOLToCRLF() • VSCROLL • WM_COPYDATA • More Examples... Updated: 22/04/2018 Link to comment Share on other sites More sharing options...
UEZ Posted December 24, 2012 Share Posted December 24, 2012 This was just a flat conversion and thus enough room for optimizations. Br, UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
PixelPixPanreyes Posted December 25, 2012 Share Posted December 25, 2012 Thanks! It worked perfectly! Link to comment Share on other sites More sharing options...
supersonic Posted January 7, 2013 Share Posted January 7, 2013 @ UEZ: Thank you for the conversion! :-) The code seems to work properly for Windows Server 2012 / 8 only? Can it be modified to work for all 'DigitalProductId' values? Link to comment Share on other sites More sharing options...
JFX Posted January 8, 2013 Author Share Posted January 8, 2013 (edited) @ UEZ:Thank you for the conversion! :-)The code seems to work properly for Windows Server 2012 / 8 only?Can it be modified to work for all 'DigitalProductId' values?I've updated the script one 1 post, using UEZ's conversion.Should now work on all Windows versions, but have not checked yet. Edited January 8, 2013 by JFX Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now