Ich hatte ein ähnliches Problem und musste Computer möglichst eindeutig identifizieren.
Vielleicht ist das für einen privaten Kopierschutz auch brauchbar.
Jeder Computer (PC, Notebook, Smartphones) verfügt über eine eindeutige UUID. Diese ist HW-seitig eingebrannt (Ähnlich der MAC Adresse einer Netzwerkkarte). Auch virtuelle Hardware verfügen darüber (Getestet aber nur mit VMWare).
Ich verwende dazu die uSMBIOS.pas (Z.B. von hier:
https://theroadtodelphi.wordpress.co...ucing-tsmbios/)
Delphi-Quellcode:
// Uses: uSMBIOS
type
TAUUID = Array[0..31] of WideChar;
// === Convert UUID ============================================================
function FormatUUID(UUID: TAUUID):String;
begin
Result:=Copy(UUID,0,8)+'-'+Copy(UUID,9,4)+'-'+Copy(UUID,13,4)+'-'+Copy(UUID,17,4)+'-'+Copy(UUID,21,12);
end;
function ConvertUUID(UUID: TUUID):TUUID;
var i: Integer;
tempUUID: TUUID;
begin
tempUUID:=UUID;
for i := 0 to 3 do tempUUID[i]:=UUID[3-i];
for i := 4 to 5 do tempUUID[i]:=UUID[4+(5-i)];
for i := 6 to 7 do tempUUID[i]:=UUID[6+(7-i)];
Result:=tempUUID;
end;
// === Get UUID ================================================================
function GetUUID:String;
Var
SMBios : TSMBios;
LSystem: TSystemInformation;
UUID,UUID2 : TAUUID; //Array[0..31] of WideChar;
Dummy: TUUID;
begin
SMBios:=TSMBios.Create;
try
LSystem:=SMBios.SysInfo;
BinToHex(@LSystem.RAWSystemInformation.UUID,UUID,SizeOf(LSystem.RAWSystemInformation.UUID));
Dummy := ConvertUUID(LSystem.RAWSystemInformation.UUID);
BinToHex(@Dummy,UUID2,SizeOf(LSystem.RAWSystemInformation.UUID));
Result := FormatUUID(UUID2);
finally
SMBios.Free;
end;
end;
Wünsche gutes Gelingen!