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\
/ \