// Seriennummer
(Produkt-Key) von
Windows auslesen. uses Registry;
var
Start: integer = 52;
Ende: integer = 67;
alg: integer = 15;
lg: integer = 29;
Tabelle: array[0..23] of char =
('B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'M',
'P', 'Q', 'R', 'T', 'V', 'W', 'X', 'Y',
'2', '3', '4', '6', '7', '8', '9');
function WindowsKey: string;
const
dpi = 'DigitalProductId';
neb = 'Nicht ermittelbar';
var
buffer: array of byte;
Reg: TRegistry;
s: string;
function decode: string;
var
arrdw: array of DWord;
zl: array of char;
dw, hx: DWord;
x, y: integer;
begin
result := '';
try
SetLength(arrdw, lg);
SetLength(zl, lg);
for x := Start to Ende do begin
arrdw[x - Start] := buffer[x];
end;
for x := pred(lg) downto 0 do begin
if ((succ(x) mod 6) = 0) then zl[x] := '-'
else begin
dw := 0;
for y := alg downto 0 do begin
hx := (dw shl 8) or arrdw[y];
arrdw[y] := hx div 24;
dw := hx mod 24;
end;
zl[x] := Tabelle[dw];
end;
end;
for x := 0 to pred(length(zl)) do
result := result + zl[x];
except
result := '';
end;
end;
begin
s := '';
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.OpenKey('\SOFTWARE\Microsoft\Windows NT\CurrentVersion', false)
then begin
SetLength(buffer, 255);
Reg.ReadBinaryData(dpi, buffer[0], 255);
s := decode;
end;
except
s := '';
end;
Reg.CloseKey;
Reg.Free;
if (s = '') or (s = 'BBBBB-BBBBB-BBBBB-BBBBB-BBBBB')
then result := neb
else result := s;
end;
// Beispielaufruf
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(WindowsKey);
end;
//------------------------------------------------------- // Variante
2
(credit Oliver Schneider) {$R PKOS.RES} // <--- Ressource einbinden
uses shellapi;
var
sl: TStringlist;
pfad, tmppgm, tmptxt, tmpbat: string;
procedure TForm1.FormCreate(Sender: TObject);
var
p: PChar;
dw: cardinal;
tr: TResourcestream;
begin
Label1.caption := '';
dw := max_path;
getmem(p, dw);
GetTempPath(dw, p);
pfad := p;
freemem(p);
tmppgm := pfad + '~~~~.exe';
tmptxt := pfad + '~~~~.txt';
tmpbat := pfad + '~~~~.bat';
tr := tresourcestream.create(hinstance, 'PK', RT_RCDATA);
tr.savetofile(tmppgm);
tr.free;
sl := TStringlist.create;
sl.add(tmppgm + ' > ' + tmptxt);
sl.SaveToFile(tmpbat);
sleep(100); // zur Sicherheit
shellexecute(handle, 'open', PChar(tmpbat), nil, nil, sw_hide);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
sl.free;
deletefile(tmppgm);
deletefile(tmptxt);
deletefile(tmpbat);
end;
// Beispielaufruf
procedure TForm1.Button2Click(Sender: TObject);
begin
sl.loadfromfile(tmptxt);
if sl[0] = 'BBBBB-BBBBB-BBBBB-BBBBB-BBBBB'
then sl[0] := 'Nicht ermittelbar';
Label1.caption := sl[0];
end;
|
Zugriffe seit 6.9.2001 auf Delphi-Ecke





