Below is code to add CD Keys for Microsoft Visual Studio 2005, 2008, and 2010, as well as Microsoft SQL Server 2005 (2000 and 2008 was included). I originally wrote it for OAv1, and re-wrote it for OAv2....
[code]'''''''''''''''''''''''''''''''' ' SQL Svr 2005 ' '''''''''''''''''''''''''''''''' strKeyPath = "SOFTWARE\Microsoft\Microsoft SQL Server\90\ProductID\" key_name = "Microsoft SQL Server 2005" key_release = "" key_edition = "" subKey = "DigitalProductID77556" key_text = GetSN(strComputer,HKEY_LOCAL_MACHINE,strKeyPath,subKey) if IsNull(key_text) or key_text = "" then strKeyPath = "SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.MSSQLSERVER\Setup\" subKey = "DigitalProductID" key_text = GetSN(strComputer,HKEY_LOCAL_MACHINE,strKeyPath,subKey) if IsNull(key_text) or key_text = "" then else result = result & " <key>" & vbcrlf result = result & " <key_name>" & escape_xml(key_name) & "</key_name>" & vbcrlf result = result & " <key_text>" & escape_xml(key_text) & "</key_text>" & vbcrlf result = result & " <key_release>" & escape_xml(key_release) & "</key_release>" & vbcrlf result = result & " <key_edition>" & escape_xml(key_edition) & "</key_edition>" & vbcrlf result = result & " </key>" & vbcrlf key_text = "" key_release = "" key_edition = "" end if else result = result & " <key>" & vbcrlf result = result & " <key_name>" & escape_xml(key_name) & "</key_name>" & vbcrlf result = result & " <key_text>" & escape_xml(key_text) & "</key_text>" & vbcrlf result = result & " <key_release>" & escape_xml(key_release) & "</key_release>" & vbcrlf result = result & " <key_edition>" & escape_xml(key_edition) & "</key_edition>" & vbcrlf result = result & " </key>" & vbcrlf key_text = "" key_release = "" key_edition = "" end if[/code]
[code]'''''''''''''''''''''''''''''''' ' Visual Studio 2010 ' '''''''''''''''''''''''''''''''' strKeyPath = "SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\Registration" key_name = "Microsoft Visual Studio 2010" key_release = "" key_edition = "" subKey = "ProductID" oReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,subKey,key
If IsNull(key) OR key = "" then strKeyPath = "SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\Registration\01018" oReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,subKey,key if IsNull(key) OR key = "" then else key_text = key result = result & " <key>" & vbcrlf result = result & " <key_name>" & escape_xml(key_name) & "</key_name>" & vbcrlf result = result & " <key_text>" & escape_xml(key_text) & "</key_text>" & vbcrlf result = result & " <key_release>" & escape_xml(key_release) & "</key_release>" & vbcrlf result = result & " <key_edition>" & escape_xml(key_edition) & "</key_edition>" & vbcrlf result = result & " </key>" & vbcrlf key_text = "" key_release = "" key_edition = "" end if else key_text = key result = result & " <key>" & vbcrlf result = result & " <key_name>" & escape_xml(key_name) & "</key_name>" & vbcrlf result = result & " <key_text>" & escape_xml(key_text) & "</key_text>" & vbcrlf result = result & " <key_release>" & escape_xml(key_release) & "</key_release>" & vbcrlf result = result & " <key_edition>" & escape_xml(key_edition) & "</key_edition>" & vbcrlf result = result & " </key>" & vbcrlf key_text = "" key_release = "" key_edition = "" end if
'''''''''''''''''''''''''''''''' ' Visual Studio 2008 ' '''''''''''''''''''''''''''''''' strKeyPath = "SOFTWARE\Wow6432Node\Microsoft\VisualStudio\9.0\Registration" key_name = "Microsoft Visual Studio 2008" key_edition = "" key_release = "" subKey = "ProductID" oReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,subKey,key_text if IsNull(key_text) or key_text = "" then ' do nothing else result = result & " <key>" & vbcrlf result = result & " <key_name>" & escape_xml(key_name) & "</key_name>" & vbcrlf result = result & " <key_text>" & escape_xml(key_text) & "</key_text>" & vbcrlf result = result & " <key_release>" & escape_xml(key_release) & "</key_release>" & vbcrlf result = result & " <key_edition>" & escape_xml(key_edition) & "</key_edition>" & vbcrlf result = result & " </key>" & vbcrlf key_text = "" key_release = "" key_edition = "" end if
'''''''''''''''''''''''''''''''' ' Visual Studio 2005 ' '''''''''''''''''''''''''''''''' strKeyPath = "SOFTWARE\Wow6432Node\Microsoft\VisualStudio\8.0\Registration" key_name = "Microsoft Visual Studio 2005" key_edition = "" key_release = "" subKey = "ProductID" oReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,subKey,key_text if IsNull(key_text) or key_text = "" then ' do nothing else result = result & " <key>" & vbcrlf result = result & " <key_name>" & escape_xml(key_name) & "</key_name>" & vbcrlf result = result & " <key_text>" & escape_xml(key_text) & "</key_text>" & vbcrlf result = result & " <key_release>" & escape_xml(key_release) & "</key_release>" & vbcrlf result = result & " <key_edition>" & escape_xml(key_edition) & "</key_edition>" & vbcrlf result = result & " </key>" & vbcrlf key_text = "" key_release = "" key_edition = "" end if[/code]
[code]Function GetSN(sComputer,sRoot,sKeyPath,sValueName) On Error Resume Next Set objRegistry = GetObject("winmgmts:\\" & sComputer & "\root\default:StdRegProv") If Err.Number = 0 Then 'On Error Resume Next 'HexBuf = WshShell.RegRead(sRegLocation) intReturn = objRegistry.GetBinaryValue(sRoot, sKeyPath, sValueName, Hexbuf) If intReturn = 0 Then 'If Err.Number = 0 Then 'On Error GoTo 0 For l = LBound(HexBuf) To UBound(HexBuf) tmp=tmp & " "& Hex (HexBuf(l)) Next StartOffset = 52 EndOffset =67 Dim Digits (24) Digits (0) = "B" : Digits (1) = "C": Digits (2) = "D": Digits (3) = "F": Digits (4) = "G": Digits (5) = "H": Digits (6) = "J": Digits (7) = "K": Digits (8) = "M": Digits (9) = "P": Digits (10) = "Q": Digits (11) = "R": Digits (12) = "T": Digits (13) = "V": Digits (14) = "W": Digits (15) = "X": Digits (16) = "Y": Digits (17) = "2": Digits (18) = "3": Digits (19) = "4": Digits (20) = "6" : Digits (21) = "7" : Digits (22) = "8": Digits (23) = "9" dLen = 29 sLen = 15 Dim HexDigitalPID (15) Dim Des (30) For i = StartOffset To EndOffset HexDigitalPID (i-StartOffset) = HexBuf(i) tmp2=tmp2 & " "& Hex (HexDigitalPID(i-StartOffset)) Next KEYSTRING ="" For i=dLen-1 To 0 Step -1 If ((i + 1) mod 6) = 0 Then Des (i) = "-" KEYSTRING =KEYSTRING & "-" Else HN = 0 For N = (sLen -1) To 0 Step -1 Value = ( (HN *2^8 ) Or HexDigitalPID (N)) HexDigitalPID (N) = Value \ 24 HN = (Value mod 24) Next Des(i) = Digits(HN) KEYSTRING =KEYSTRING & Digits(HN) End If Next KEYSTRING2 = StrReverse (KEYSTRING) GetSN = KEYSTRING2 Else 'Err.Clear 'On Error GoTo 0 'GetSN = sProduct & " is not installed" End If Else Err.Clear On Error GoTo 0 'GetSN = "Error reading registry of " & sComputer End If End Function[/code]
I always included [code]OR key = "" then[/code] because sometimes the function would catch keys as "" but not null and insert that into the database.
Also, for Visual Studio 2010 and SQL Server 2005 I have 2 possible paths as depending on the Windows version and such, they were found in 2 different locations.
|