Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Windows Vista hat keine Produkt ID mehr? (https://www.delphipraxis.net/147908-windows-vista-hat-keine-produkt-id-mehr.html)

alleinherrscher 18. Feb 2010 21:30


Windows Vista hat keine Produkt ID mehr?
 
Hi@all. Auf der Suche nach einem halbwegs guten Kriterium, um einen Rechner "eindeutig" zu identifizieren (ich weiß, das geht nicht, bitte keine Grundsatzdiskussion an dieser Stelle), bin ich durch Suchen im Forum auf die Windows ID aufmerksam geworden. Diese findet man unter Windows XP in der Registry, weshalb ich mir eine kleine Funktion gebastelt habe:

Delphi-Quellcode:
function TForm1.GetWindowsID:string;
var Reg:TRegistry;
begin
    try
      Reg := TRegistry.Create;
      Reg.RootKey := HKEY_LOCAL_MACHINE;
      Reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion', false);
      result := Reg.ReadString('ProductID');
   except
      result := 'Unknown';
   end;

end;
Leider existiert der Eintrag "ProductID" unter Windows Vista nicht mehr in diesem Verzeichnis. Hat Vista keine ProductID mehr, oder ist diese einfach woanders zu finden? Gibt es evtl eine API Funktion, um die Nummer Betriebsystemunabhängig auszulesen?

Grüße und besten Dank,

Euer Michael

paperboy 18. Feb 2010 21:50

Re: Windows Vista hat keine Produkt ID mehr?
 
hallo alleinherrscher

guck mal hier:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion

dort gibts was du suchst...

lg paperboy

ps: und es sollte über die Windows Management Instrumentation (WMI) möglich sein die ProductID zu bekommen...

Muetze1 19. Feb 2010 08:32

Re: Windows Vista hat keine Produkt ID mehr?
 
Sein Schlüssel ist schon ganz korrekt, ich vermute eher, dass er versucht mit einem 32 Bit Programm auf einem 64 Bit OS diesen Schlüssel zu lesen. Der existiert nicht in der 32 Bit Registry, von daher müsste er die entsprechenden Flags beim anlegen des Registry Objektes mitgeben.

alleinherrscher 19. Feb 2010 09:22

Re: Windows Vista hat keine Produkt ID mehr?
 
Zitat:

Zitat von Muetze1
Sein Schlüssel ist schon ganz korrekt, ich vermute eher, dass er versucht mit einem 32 Bit Programm auf einem 64 Bit OS diesen Schlüssel zu lesen. Der existiert nicht in der 32 Bit Registry, von daher müsste er die entsprechenden Flags beim anlegen des Registry Objektes mitgeben.

Seind beides 32 Bit System. Windows XP Prof. und Windows Vista Business. Aber natürlich soll die funktion auch unter 64bit funktionieren...Was für Flags meinst du?

Uwe Raabe 19. Feb 2010 09:24

Re: Windows Vista hat keine Produkt ID mehr?
 
Zitat:

Zitat von alleinherrscher
Seind beides 32 Bit System. Windows XP Prof. und Windows Vista Business. Aber natürlich soll die funktion auch unter 64bit funktionieren...Was für Flags meinst du?

Delphi-Quellcode:
TRegistry.Create(KEY_READ OR KEY_WOW64_64KEY);

paperboy 19. Feb 2010 10:46

Re: Windows Vista hat keine Produkt ID mehr?
 
Zitat:

Zitat von Muetze1
Sein Schlüssel ist schon ganz korrekt, ich vermute eher, dass er versucht mit einem 32 Bit Programm auf einem 64 Bit OS diesen Schlüssel zu lesen. Der existiert nicht in der 32 Bit Registry, von daher müsste er die entsprechenden Flags beim anlegen des Registry Objektes mitgeben.


Sein Schlüssel ist korrekt? Also mein Vista (32-Bit) hat keinen ProductID Eintrag unter
Delphi-Quellcode:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
nur unter:
Delphi-Quellcode:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
Hast du es denn mal versucht mit dem Pfad alleinherrscher?

Uwe Raabe 19. Feb 2010 11:06

Re: Windows Vista hat keine Produkt ID mehr?
 
Das ganze ist unter Windows 7 offensichtlich auch nicht mehr so einfach. Mit den folgenden Routinen kann man aber den CD-Key auslesen:

Delphi-Quellcode:
function GetDigitalProductId: TBytes;
const
  cRegPath = 'Software\Microsoft\Windows NT\CurrentVersion';
  cRegKey = 'DigitalProductId';
var
  bufSize: Integer;
  reg: TRegistry;
begin
  result := nil;
  reg := TRegistry.Create(KEY_READ OR KEY_WOW64_64KEY);
  try
    reg.RootKey := HKEY_LOCAL_MACHINE;
    if reg.OpenKeyReadOnly(cRegPath) then begin
      try
        if reg.ValueExists(cRegKey) then begin
          bufSize := reg.GetDataSize(cRegKey);
          if bufSize > 0 then begin
            SetLength(result, bufSize);
            reg.ReadBinaryData(cRegKey, result[0], bufSize);
          end;
        end;
      finally
        reg.CloseKey;
      end;
    end;
  finally
    reg.Free;
  end;
end;

function GetWindowsCDKey: string;
const
  cChars = 'BCDFGHJKMPQRTVWXY2346789';
var
  tmp: TBytes;
  buffer: TBytes;
  Current: Integer;
  I: Integer;
  N: Integer;
  K: Integer;
begin
  result := '';
  SetLength(tmp, 15);
  buffer := GetDigitalProductId;
  if Length(buffer) > 66 then begin
    for I := 52 to 66 do
      tmp[I - 52] := buffer[I];
    result := '';
    for N := 0 to 24 do begin
      Current := 0;
      for K := Length(tmp) - 1 downto 0 do begin
        Current := (Current * 256) xor tmp[K];
        tmp[k] := (Current div 24) and $FF;
        Current := Current mod 24;
      end;
      Inc(Current);
      result := cChars[Current] + result;
    end;
    for I := (Length(result) - 1) div 5 downto 1 do
      Insert('-', result, 5*I + 1);
  end;
end;

mcinternet 4. Mär 2011 14:10

AW: Windows Vista hat keine Produkt ID mehr?
 
und wie findet man den Office Key?

Gruss
Mc


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz