Delphi-PRAXiS
Seite 1 von 2  1 2      

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 7 Product Key (https://www.delphipraxis.net/165437-windows-7-product-key.html)

DArc 30. Dez 2011 19:01

Windows 7 Product Key
 
Hallo Delphianer,

meine Frage richtet sich auf das im Threadnamen stehende Thema.
Ich versuchte erfolglos die Binary Werte des Registry Eintrags 'DigitalProductId' bzw. 'DigitalProductId64'
durch folgenden Code auszulesen:

Delphi-Quellcode:
function GetWindowsRegistryValuesA: string;
var
  Reg:     TRegistry;
  i:  Integer;
begin
  Reg := TRegistry.Create(KEY_READ);
  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    if (Reg.OpenKeyReadOnly('SOFTWARE\Microsoft\Windows NT\CurrentVersion\')) then
    begin
      try

        { Bemerkung: Ich überprüfe mit ValueExists die Existenz der Werte.
                     Mit KeyExists hab ichs auch versucht.
                     Es klappt eigentlich bei jedem Wert, nur nicht bei
                     den zwei besagten.
        }

        { Beispiel Code einer Erfolgreichen Operation: }

        // Check and Read BuildGUID
        if Reg.ValueExists('BuildGUID') then
          Result := Result + #13#10 + 'BuildGUID: ' + Reg.ReadString('BuildGUID');

        { Die nächsten 2 Operationen geben nichts zurück, sprich Result
          wird nicht erweitert.
        }

        // Check and Read DigitalProductId
        if Reg.ValueExists('DigitalProductId') then
          Result := Result + 'existiert';

        // Check and Read DigitalProductId4
        if Reg.ValueExists('DigitalProductId64') then
          Result := Result + 'existiert';

       // usw.

      finally
        Reg.CloseKey;
      end;
    end;
  finally
    Reg.Free;
  end;
end;
Hoffe ihr könnt mir helfen,
Mfg DArc

jaenicke 30. Dez 2011 19:33

AW: Windows 7 Product Key
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also bei mir existieren die auch nicht. Siehe hier:

Anhang 35953

Nur im 64-Bit Zweig gibt es die bei mir, aber auf den greifst du ja nicht zu.

DArc 30. Dez 2011 19:43

AW: Windows 7 Product Key
 
Schade, also ich kannte ja bisher die Methode per Registry den Key auszulesen ...

Gibt es da ne andere Möglichkeit?

Wäre über ein Tipp sehr erfreut.

Mfg DArc

jaenicke 30. Dez 2011 19:49

AW: Windows 7 Product Key
 
Du musst als Zugriffsflag KEY_WOW64_64KEY, also $0100, übergeben, damit du aus dem 64-Bit Zweig liest. Das hätte Google dir aber auch gesagt. :angel:

DArc 30. Dez 2011 19:57

AW: Windows 7 Product Key
 
das hab ich auch schon mal versucht gehabt (infos hatte ich von http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx)

ich habe also
Delphi-Quellcode:
  Reg := TRegistry.Create(KEY_READ or $0100);
verwendet, jedoch kein unterschied :(

jaenicke 30. Dez 2011 20:08

AW: Windows 7 Product Key
 
Du benutzt OpenKeyReadOnly. Damit setzt du die Zugriffsflags zurück. Damit geht das nicht. ;-)

DArc 30. Dez 2011 22:04

AW: Windows 7 Product Key
 
Tut mir leid, bin grad etwas neben mir, vorallem weil es nicht so funktionieren mag wie ich es wünsche :D

Delphi-Quellcode:
function GetWindowsRegistryValuesA: string;
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create(KEY_READ or $0100);
  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    if (Reg.OpenKey('SOFTWARE\Microsoft\Windows NT\CurrentVersion\', false)) then
    begin
      try
      if Reg.KeyExists('DigitalProductId') then
                Result := Result + 'existiert';

        if Reg.ValueExists('DigitalProductId64') then
                Result := Result + 'existiert';
      finally
        Reg.CloseKey;
      end;
    end;
  finally
    Reg.Free;
  end;
end;
Kann jemand versuchen das mal bei sich auszutesten?
Oder hat jemand schon den Fehler gefunden? :D

Mfg DArc

jaenicke 30. Dez 2011 22:07

AW: Windows 7 Product Key
 
Funktioniert problemlos. Nur dass du beim ersten if aus Versehen KeyExists statt ValueExists drin hast und beim zweiten DigitalProductId64 statt DigitalProductId4...

Wenn ich beides korrigiere, klappt es auch.

// EDIT:
Übrigens geht in aktuellen Delphiversionen auch OpenKeyReadOnly, das war nur in deinem alten Delphi 7 noch ein bekannter Bug. ;-)

DArc 30. Dez 2011 22:28

AW: Windows 7 Product Key
 
och ich dummerchen, solche fehler sind echt nervig :D

danke, ihr seid die besten! :thumb:

Mfg DArc

€dit:
Zitat:

Übrigens geht in aktuellen Delphiversionen auch OpenKeyReadOnly, das war nur in deinem alten Delphi 7 noch ein bekannter Bug.
Gut zu wissen, danke!

P.S.: Thread kann geclosed werden, da mein Problem nicht mehr unter uns weilt. :D

netpilots 5. Apr 2013 00:11

AW: Windows 7 Product Key
 
Zitat:

Übrigens geht in aktuellen Delphiversionen auch OpenKeyReadOnly, das war nur in deinem alten Delphi 7 noch ein bekannter Bug.
Ich wage noch kurz eine Frage.

Gibt es Methoden den 'Bug' in Delphi Versionen >= D7 wegzukriegen um doch noch OpenKeyReadOnly zu verwenden.
KeyRead in HK_LocalMachine benötigt Administratorenrechte wenn man nur OpenKey verwendet. Mit OpenKeyReadOnly würde es ohne Admin Rechte funktionieren.

MfG - Netpilots


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:07 Uhr.
Seite 1 von 2  1 2      

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