Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как внести в реестр бинарные данные


Автор: Waterman 23.12.2005, 23:15
Подскажите пожалуйста как проще внести в реестр бинарные данные.
Например:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\CDFS]
"CacheSize"=hex:ff,ff,00,00

Строковые и целые вносятся просто и без проблем.

Код

Reg.OpenKey('\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\', True);
      Reg.WriteString('Auto','0');
      Reg.CloseKey;

Reg.OpenKey('\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\', True);
      REG.WriteInteger('DisablePagingExecutive',00000001);
      Reg.CloseKey; 


Если можно приведите работающий код. Желательно как можно проще.
Спасибо.

Автор: FRAGNATIC 23.12.2005, 23:20
WriteBool
WriteBinary

Автор: Guest 23.12.2005, 23:44
А как это всё вставить в программу?
Как выглядит сама прцедура. Я пробовал но, видимо что-то не так делал и выдаёт ошибку.
Код

WriteBool
WriteBinary 

Автор: Albinos_x 24.12.2005, 00:32
Цитата(Guest @ 23.12.2005, 23:44)
Я пробовал но, видимо что-то не так делал и выдаёт ошибку.

код покажи...

Автор: Poseidon 24.12.2005, 11:34
Цитата(Guest @ 23.12.2005, 23:44)
А как это всё вставить в программу?
Как выглядит сама прцедура. Я пробовал но, видимо что-то не так делал и выдаёт ошибку.
smile smile smile

Код
Reg.OpenKey('\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\', True);
      Reg.WriteBinary('Auto',бинарное значение);
      Reg.CloseKey;


Автор: Гость_Павел 29.12.2005, 00:19
Так не работает. Почему то не хочет воспринимать WriteBinary
Код

Reg.OpenKey('\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\', True);
      Reg.WriteBinary('Auto',бинарное значение);
      Reg.CloseKey;


Может что не так.

Автор: Albinos_x 29.12.2005, 00:33
Цитата
Почему то не хочет воспринимать WriteBinary

в каком смысле? может у тебя ключ не открывается?
Код

if Reg.OpenKey('\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\', True) then
      begin    
      Reg.WriteBinary('Auto',бинарное значение);    
      Reg.CloseKey;
      end
      else
      ShowMessage('ключ не открыт');

Автор: Гость_Павел 29.12.2005, 00:46
Я вношу такие ключи в реестр:

Код


Reg.RootKey := HKEY_LOCAL_MACHINE;
    Reg.OpenKey('\SYSTEM\CurrentControlSet\Control\FileSystem\CDFS\', True);
    REG.WriteInteger('Prefetch',16384);
    REG.WriteInteger('PrefetchTail',16384);

    Reg.WriteBinary('CacheSize',ff,ff,00,00); 

Reg.CloseKey;

И программа останавливается на Reg.WriteBinary('CacheSize',ff,ff,00,00);
Что-то не то делаю.

Автор: Albinos_x 29.12.2005, 01:03
Reg.WriteBinary(const name:string;var Buffer,BufferSize:integer);

Автор: Teran 29.12.2005, 10:30
Читать данные:

Код

var
......
Buffer  : Array[0..65535] of Byte;
BufSize : Integer;
begin
........
 Reg.GetKeyInfo(KeyInfo);
 if KeyInfo.NumValues<0 then Exit;
 ValueNames := TStringList.Create;
 Reg.GetValueNames(ValueNames);
 for i := 0 to ValueNames.Count-1 do
   begin
   DataType := Reg.GetDataType(ValueNames[i]);
   Case DataType of
    rdString: begin  str := Reg.ReadString(ValueNames[i]);end;
    rdExpandString: begin  str := Reg.ReadString(ValueNames[i]);end;
    rdInteger: begin str:= '0x'+IntToHex(Reg.ReadInteger(ValueNames[i]),8)+'('+IntToStr(Reg.ReadInteger(ValueNames[i]))+')';end;
    rdBinary: begin 
               BufSize :=Reg.ReadBinaryData(ValueNames[i], Buffer, SizeOf(Buffer));
               int :=0;Str:='';  // convert char to hex
               repeat
                ch :=IntToHex(Buffer[int], 2);
                Str :=Str + ch+' ';
                inc(int);
               until int >= BufSize ;
              end;

   else begin str:= '???';end;
   end;
   str -----  Тут находятся значение
   end;
 ValueNames.Free;



Писать:
Код

var
Buffer:Pointer;
i : Integer;
.......
begin
......
Reg.WriteString(bsSkinEdit1.Text,bsSkinEdit2.Text);

Reg.WriteInteger(bsSkinEdit1.Text,strtoint(bsSkinEdit2.Text));

i:=Length(MPHexEditor1.AsHex) div 2;  //MPHexEditor1- компонент шестнадцатеричный редактор
Buffer:=AllocMem(i);
HexToBin(Pchar(MPHexEditor1.AsHex),Buffer,i);
Reg.WriteBinaryData(bsSkinEdit1.Text,Buffer^,i);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)