AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Windows Vista hat keine Produkt ID mehr?
Thema durchsuchen
Ansicht
Themen-Optionen

Windows Vista hat keine Produkt ID mehr?

Ein Thema von alleinherrscher · begonnen am 18. Feb 2010 · letzter Beitrag vom 4. Mär 2011
Antwort Antwort
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#1

Windows Vista hat keine Produkt ID mehr?

  Alt 18. Feb 2010, 22:30
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
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
paperboy

Registriert seit: 10. Jun 2009
71 Beiträge
 
RAD-Studio 2009 Arc
 
#2

Re: Windows Vista hat keine Produkt ID mehr?

  Alt 18. Feb 2010, 22:50
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...
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#3

Re: Windows Vista hat keine Produkt ID mehr?

  Alt 19. Feb 2010, 09:32
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.
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Windows Vista hat keine Produkt ID mehr?

  Alt 19. Feb 2010, 10:22
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?
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.445 Beiträge
 
Delphi 12 Athens
 
#5

Re: Windows Vista hat keine Produkt ID mehr?

  Alt 19. Feb 2010, 10:24
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?
TRegistry.Create(KEY_READ OR KEY_WOW64_64KEY);
Uwe Raabe
  Mit Zitat antworten Zitat
paperboy

Registriert seit: 10. Jun 2009
71 Beiträge
 
RAD-Studio 2009 Arc
 
#6

Re: Windows Vista hat keine Produkt ID mehr?

  Alt 19. Feb 2010, 11:46
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
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion nur unter:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion Hast du es denn mal versucht mit dem Pfad alleinherrscher?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.445 Beiträge
 
Delphi 12 Athens
 
#7

Re: Windows Vista hat keine Produkt ID mehr?

  Alt 19. Feb 2010, 12:06
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;
Uwe Raabe
  Mit Zitat antworten Zitat
mcinternet

Registriert seit: 22. Apr 2010
Ort: Odenwald
193 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Windows Vista hat keine Produkt ID mehr?

  Alt 4. Mär 2011, 15:10
und wie findet man den Office Key?

Gruss
Mc
Jörg
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:48 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