Seite 1 von 1

GetWindowsProductKey

Verfasst: 21.11.2010 16:35
von ts-soft

Code: Alles auswählen

; Original Code in XProfan by frank abbing
; http://www.paules-pc-forum.de/forum/dlls-includes-units-prozeduren/134802-windows-product-key-auslesen.html

; rewritten to work with purebasic by ts-soft

; Plattform: windows only
; Supports 32 and 64 bit OS
; Supports Ascii and Unicode
; Requires PureBasic 4.40 and higher

EnableExplicit

#KEY_WOW64_64KEY = $100

Procedure.s GetWindowsProductKey()
  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

Debug GetWindowsProductKey()

Gruß
Thomas

Re: GetWindowsProductKey

Verfasst: 21.11.2010 17:15
von rolaf
Nützlich :allright:

Re: GetWindowsProductKey

Verfasst: 21.11.2010 17:17
von STARGÅTE
Der Code ist toll und funktioniert, aber
DrFalo hat geschrieben:Nützlich :allright:
für was ?

Re: GetWindowsProductKey

Verfasst: 21.11.2010 17:22
von rolaf
STARGÅTE hat geschrieben:Der Code ist toll und funktioniert, aber
DrFalo hat geschrieben:Nützlich :allright:
für was ?
Für mich. :mrgreen:

Re: GetWindowsProductKey

Verfasst: 21.11.2010 17:28
von ts-soft
STARGÅTE hat geschrieben:Der Code ist toll und funktioniert, aber
DrFalo hat geschrieben:Nützlich :allright:
für was ?
Manch einer baut in seine About-Box gerne Infos zum System der Benutzers ein,
da gehört dies oftmals dazu.

Da jetzt einen KeyChanger (gibt es ja schon ne Menge von) daraus zu basteln,
sollte auch keine große Hürde mehr sein.

Re: GetWindowsProductKey

Verfasst: 03.12.2010 16:09
von Helle
Für Windows 2000 muss #KEY_WOW64_64KEY rausgenommen werden! Getestet mit W2k SP4.
Gruß
Helle

Re: GetWindowsProductKey

Verfasst: 04.12.2010 01:47
von ts-soft
Helle hat geschrieben:Für Windows 2000 muss #KEY_WOW64_64KEY rausgenommen werden! Getestet mit W2k SP4.
Gruß
Helle
Danke für den Hinweis, steht auch so in der MSDN, hab es aber übersehen
(wer denkt auch an so olles OS <) )

Code im ersten Beitrag angepaßt!