BinaryData Again

0

Mczy ktos moze mi powiedziec dlaczego taki kod(znalazlem go gdzies na forum):

var 
wartosci:  array[1..4] of byte;
reg:TRegistry; 
begin 
wartosci[1]:=$01;
wartosci[2]:=$00;
wartosci[3]:=$00;
wartosci[4]:=$00;
reg:=TRegistry.Create; 
reg.OpenKey('Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System', True); 
reg.WriteBinaryData('nodispcpl', wartosci, 4); 
reg.CloseKey; 
reg.Free; 
end; 

dziala, a gdy chce utworzyc tablice dynamicznie

var 
wartosci:  array of byte;
reg:TRegistry; 
begin 
setlength(wartosci, 4);
wartosci[0]:=$01;
wartosci[1]:=$00;
wartosci[2]:=$00;
wartosci[3]:=$00;
reg:=TRegistry.Create; 
reg.OpenKey('Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System', True); 
reg.WriteBinaryData('nodispcpl', wartosci, 4); 
reg.CloseKey; 
reg.Free; 
end; 

zapisuje do rejestru jakies totalne piedroly i chyba losowo wybrane liczby?
Gdzies widzialem ze mozna zapisac to za pomoca writeInteger ale nie wiem jak;
ten temat wqrwia mnie maxymalnie bo praktycznie na zadnym forum nie jest wyjasnione do konca jak to zrobic...

0

Bardzo częsty błąd. Zamiast:

reg.WriteBinaryData('nodispcpl', wartosci, 4);

Napisz

reg.WriteBinaryData('nodispcpl', wartosci[0], 4);

albo

reg.WriteBinaryData('nodispcpl', wartosci^, 4);
0

Nie no juz sam znalazlem odpowiedz na innym forum napisana przez cyrkiela i po mojej lekkiej modyfikacji:

procedure TForm1.Button1Click(Sender: TObject);
var r:tregistry;
tablica:array of char;
linia:string;
i, j, x:integer;
begin
linia := ':00,00,00,00,00,00,10,40';

SetLength(tablica, length(linia) div 3);
i:=0;
j:=2;
while j<=length(linia) do begin
tablica[i]:=chr(strtoint('$'+linia[j]+linia[j+1]));
j:=j+3;
inc(i);
end;
r:=tregistry.Create;
r.RootKey:=HKEY_CURRENT_USER;
r.OpenKey('Software\Beju',true);
r.WriteBinaryData('cośtam',tablica[0],length(tablica));
r.CloseKey;
r.Free;
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1