AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) ProductID auslesen zwecks "Kopierschutz"

ProductID auslesen zwecks "Kopierschutz"

Ein Thema von erich.wanker · begonnen am 26. Mai 2015 · letzter Beitrag vom 27. Mai 2015
 
Benutzerbild von erich.wanker
erich.wanker

Registriert seit: 31. Jan 2008
Ort: im schönen Salzburger Land
464 Beiträge
 
Delphi XE4 Professional
 
#1

ProductID auslesen zwecks "Kopierschutz"

  Alt 26. Mai 2015, 09:58
Hallo Leute,

ich möchte gerne einen "eindeutigen" String eines WindowsOS auslesen..
Gegal ob UAC aktiv oder nicht
Egal ob 32 oder 64 Bit Windows
Egal ob reale Maschine oder virtuelle Maschine
Egal ob uraltes oder neuestes Betriebssystem
Egal - welche Userberechtigung anliegt

Anhand dieses Strings würde ich dann online "nachschauen" - ob der Rechner eine gültige Nutzungslizenz besitzt.


Hab momentan die unten ageführten Zeilen:

Ist das eurer Meinung nach ne brauchbare Lösung (auch in Bezug auf Win10?)

Vielen Dank für Infos

Erich



Delphi-Quellcode:
function TMainForm.GetWindowsRegistryValuesA: string;
const
  CDataValue1: string = 'DigitalProductId';
  CDataValue2: string = 'DigitalProductId4';
  CKeyName: string = 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\';
var
  Reg: TRegistry;
  message_string:String;
  vSize, p: integer;
  tmpStr: AnsiString;
begin

  message_string:='Keine Werte gefunden';

  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    if (Reg.OpenKeyReadOnly(CKeyName)) then
    begin
      try

        if Reg.ValueExists(CDataValue1) then // 32 Bit OS
              begin
              vSize := reg.GetDataSize(CDataValue1);
              if (vSize > 0) then
              begin
                SetLength(tmpStr, vSize);
                reg.ReadBinaryData(CDataValue1, tmpstr[1], vSize);
                repeat
                  p := Pos(#0, tmpStr);
                  if p <> 0 then
                    Delete(tmpStr, p, 1);
                until p = 0;
                message_string :='ProductID 32bit:'+ tmpStr;
              end;
              end;

        if Reg.ValueExists(CDataValue2) then // 64 Bit OS
              begin
              vSize := reg.GetDataSize(CDataValue2);
              if (vSize > 0) then
              begin
                SetLength(tmpStr, vSize);
                reg.ReadBinaryData(CDataValue2, tmpstr[1], vSize);
                repeat
                  p := Pos(#0, tmpStr);
                  if p <> 0 then
                    Delete(tmpStr, p, 1);
                until p = 0;
                message_string :='ProductID 64bit:'+ tmpStr;
              end;
              end;

      finally
        Reg.CloseKey;
      end;
    end;
  finally
    Reg.Free;
  end;

  showmessage(message_string);

end;
Erich Wanker - for life:=1971 to lebensende do begin ..
O
/H\
/ \

Geändert von erich.wanker (26. Mai 2015 um 10:07 Uhr)
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 05:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz