Gibt es eine Möglichkeit mit PB festzustellen, ob die Windowsversion aktiviert wurde ?
Ich brauche dies, um den ProductKey auszulesen. Den auszulesen ist nicht das Problem, nur wenn bei
der Installation kein Key eingegeben wurde, scheint Windows (zumindest bei 7 in der Virtualbox)
einen zufälligen Key zu generieren.
Wenn nun Windows nicht aktiviert wurde, sollte dann mein "ProductKey - Feld" in meinem Systeminfo Anzeiger
leer bleiben. Wie realisiere ich das mit PB ?
Falls es hilft oder dort evt. ein Fehler steckt, der ProductKey wird ausgelesen mit :
Code: Alles auswählen
#KEY_WOW64_64KEY = $100
#KEY_WOW64_32KEY = $200
Procedure.s GetOSProductKey() ; Gibt den ProductKey des OS zurück.
Protected hKey, Res, size = 280
Protected i, j, x, Result.s
Protected *mem = AllocateMemory(size)
Protected *newmem = AllocateMemory(size)
Protected *digits = AllocateMemory(25)
PokeS(*digits, "BCDFGHJKMPQRTVWXY2346789", -1, #PB_Ascii)
If OSVersion() <= #PB_OS_Windows_2000
Res = RegOpenKeyEx_(#HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows NT\CurrentVersion", 0, #KEY_READ, @hKey)
Else
Res = RegOpenKeyEx_(#HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows NT\CurrentVersion", 0, #KEY_READ | #KEY_WOW64_64KEY, @hKey)
EndIf
If Res = #ERROR_SUCCESS
RegQueryValueEx_(hKey, "DigitalProductID", 0, 0, *mem, @size)
RegCloseKey_(hKey)
If size <> 280
For i = 24 To 0 Step -1
x = 0
For j = 66 To 52 Step -1
x = (x << 8) + PeekA(*mem + j)
PokeA(*mem + j, x / 24)
x % 24
Next
PokeA(*newmem + i, PeekA(*digits + x))
Next
For i = 0 To 15 Step 5
Result + PeekS(*newmem + i, 5, #PB_Ascii) + "-"
Next
Result + PeekS(*newmem + 20, 5, #PB_Ascii)
EndIf
EndIf
FreeMemory(*mem) : FreeMemory(*newmem) : FreeMemory(*digits)
ProcedureReturn Result
EndProcedure

