хм .. спс ... получилось но не так как хотелось бы ... точнее результат не тот который я ожидал ..
в общем..
есть скриптик
Set WshShell = CreateObject("WScript.Shell")
MicroSoft = "HKLM\SOFTWARE\Microsoft"
DigitalProductIdWindows = MicroSoft & "\Windows NT\CurrentVersion\DigitalProductId"
On Error Resume Next
Set Word = CreateObject("Word.Application")
DigitalProductIdOffice = MicroSoft & "\Office\" & word.Version & "\Registration\" & _
word.ProductCode & "\DigitalProductId"
If Err.Number = 0 Then
Word.Quit
OfficeKey = GetKey(WshShell.RegRead(DigitalProductIdOffice))
WScript.Echo "Ключ MS Office: " & OfficeKey
Else
WScript.Echo "Возможно, MS Office не установлен."
End If
On Error GoTo 0
WindowsKey = GetKey(WshShell.RegRead(DigitalProductIdWindows))
WScript.Echo "Ключ Windows: " & WindowsKey
Function GetKey(byval p)
pc="BCDFGHJKMPQRTVWXY2346789"
For i=0 To 28
a=0
For j=0 To 14
a=p(66-j)+a*256
p(66-j)=(a\24) And 255
a=a Mod 24
Next
ProductKey = Mid(pc,a+1,1) & ProductKey
If (((i+2) Mod 6)=0) And (i<28) Then
i=i+1
ProductKey = "-" & ProductKey
End If
Next
GetKey = ProductKey
End Function
который вытаскивает с реестра номера ключей ...
переписал его на Delphi
var
reg: TRegistry;
Key:HKey;
temp,temp1:TStringList;
i,j:integer;
buf: array of byte;
info: TRegDataInfo;
sz:word;
begin
reg := TRegistry.Create;
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.RegistryConnect(edit1.text);
reg.OpenKey('SOFTWARE\Microsoft\Windows NT\CurrentVersion\',false);
reg.GetDataInfo('DigitalProductId', info);
sz := info.DataSize;
SetLength(buf, sz);
reg.ReadBinaryData('DigitalProductId',buf[0],sz);
edit2.Text:= GetKey(buf);
...........................
...........................
function Tmain.GetKey(p:array of byte): String;
var pc,ProductKey:string;
i,j:integer;
a:integer;
begin
ProductKey:='';
pc:='BCDFGHJKMPQRTVWXY2346789';
For i:=0 To 28 do
begin
a:=0 ;
For j:=0 To 14 do
begin
a:=p[66-j]+a*256;
p[66-j]:=(a div 24) and 255;
a:=a Mod 24;
end;
ProductKey := copy(pc,a+1,1) + ProductKey ;
If (((i+2) Mod 6)=0) And (i<28) Then
begin
ProductKey :='-' + ProductKey;
End;
end;
result:= ProductKey ;
end;
Правильно ли я перевел так как результат в delphi не совпадает с результатом работы скрипта =\