Code: Select all
c:\>wmic computersystem list brief /format:csv
c:\>wmic os get "SerialNumber" /value|find "="
Code: Select all
c:\>wmic computersystem list brief /format:csv
c:\>wmic os get "SerialNumber" /value|find "="
Code: Select all
Procedure.s ConvertToKey(*DigitalID)
#KeyOffset = 52
If OSVersion() >= #PB_OS_Windows_8 : PokeA(*DigitalID + 66, 1) : EndIf
Characters.s = "BCDFGHJKMPQRTVWXY2346789"
nLength = Len(Characters)
For rtnCount = nLength To 0 Step -1
nCurrent = 0
For x = 14 To 0 Step -1
nCurrent * 256
nCurrent + PeekA(*DigitalID + x + #KeyOffset)
PokeA(*DigitalID + x + #KeyOffset, nCurrent / nLength)
nCurrent = Mod(nCurrent, nLength)
Next
KeyOutput.s = Mid(Characters, nCurrent + 1, 1) + KeyOutput
Next
If OSVersion() < #PB_OS_Windows_8 : nStart = 1 : Else : nStart = 2 : EndIf
a.s = Mid(KeyOutput, nStart, 5)
b.s = Mid(KeyOutput, 6, 5)
c.s = Mid(KeyOutput, 11, 5)
d.s = Mid(KeyOutput, 16, 5)
e.s = Mid(KeyOutput, 21, 5)
ProcedureReturn a + "-" + b + "-" + c + "-" + d + "-" + e
EndProcedure
Procedure GetRegistryValue(hKey, lpSubKey.s, lpValueName.s)
#KEY_WOW64_64KEY = $100
If RegOpenKeyEx_(hKey, lpSubKey, ulOptions, #KEY_QUERY_VALUE | #KEY_WOW64_64KEY, @phkResult) = #ERROR_SUCCESS
If RegQueryValueEx_(phkResult, lpValueName, lpReserved, @lpType, #Null, @lpcbData) = #ERROR_SUCCESS
If lpcbData
*lpData = AllocateMemory(lpcbData)
RegQueryValueEx_(phkResult, lpValueName, lpReserved, @lpType, *lpData, @lpcbData)
EndIf
EndIf
RegCloseKey_(phkResult)
EndIf
ProcedureReturn *lpData
EndProcedure
lpSubKey.s = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"
*lpData = GetRegistryValue(#HKEY_LOCAL_MACHINE, lpSubKey, "ProductName")
Debug "Product Name: " + PeekS(*lpData) : FreeMemory(*lpData)
*lpData = GetRegistryValue(#HKEY_LOCAL_MACHINE, lpSubKey, "ProductId")
Debug "Product ID: " + PeekS(*lpData) : FreeMemory(*lpData)
*lpData = GetRegistryValue(#HKEY_LOCAL_MACHINE, lpSubKey, "DigitalProductId")
Debug "Product Key: " + ConvertToKey(*lpData) : FreeMemory(*lpData)