TRegistry.ReadBinaryData - как правильно пользоваться?

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Dr_Grizzly
Сообщения: 407
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

Всем привет! Такая вот проблемка, не могу прочитать значение параметра из реестра с типом REG_DWORD.....

Какое значение нужно указать в функции ReadBinaryData в переменной Buffer и BufSize???

Заранее благодарен ;)
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

DWORD = 32-bit unsigned integer. 4 байта соответственно
--------------------------------------------------------------------------------
Добавленное сообщение
--------------------------------------------------------------------------------
только не понятно, зачем для чтения целого числа использовать ReadBinaryData если есть ReadInteger?
Изображение
Dr_Grizzly
Сообщения: 407
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

Ну вот! Точняк, что-то у меня не получалось до этого, наверное потомучто использовал strtofloat() а не strtoint(). Ща попробовал еще раз, и получилось получить данные через ReadInteger... Благодарю!

Вот код кому интересно:

Код: Выделить всё

Function Regedit(RootKey:Integer; Path:String='Îáÿçàòåëüíî'; CanCreat:boolean=false;WrString:String=''; Value:String=''; RdString:String=''; CanDelete:boolean=false; Allparam:boolean=false;AllKey:boolean=false):String;
var
Reg: TRegistry;
Val: TStringList;
begin
Reg:=TRegistry.Create;
try
Val:=TstringList.Create;
try
Case Rootkey of
1:Reg.RootKey:=HKEY_CURRENT_USER;
2:Reg.RootKey:=HKEY_LOCAL_MACHINE;
3:Reg.RootKey:=HKEY_CLASSES_ROOT;
4:Reg.RootKey:=HKEY_USERS;
5:Reg.RootKey:=HKEY_CURRENT_CONFIG
else
Reg.RootKey:=HKEY_CURRENT_USER;
end;

Reg.OpenKey(Path,CanCreat);
begin
Reg.GetValueNames(Val);

If WrString<>'' then
begin
 If (reg.GetDataType(WrString)=rdInteger) or(reg.GetDataType(WrString)=rdBinary ) then
   Reg.WriteInteger(WrString,StrToInt(Value))
  else
   Reg.WriteString(WrString,Value);
Regedit:='Ïðîèçâåäåíà ïîïûòêà çàïèñè â ðååñòð';
end;

If RdString<>'' then
 If (reg.GetDataType(RdString)=rdInteger) or(reg.GetDataType(RdString)=rdBinary ) then
  RegEdit:=FloatToStr(Reg.ReadInteger(RdString))
 else
  RegEdit:=Reg.ReadString(RdString);


If allparam=true then
reg.GetValueNames(form1.Listbox1.Items);

If allkey=true then
reg.GetKeyNames(form1.Listbox1.Items);

If CanDelete=true then
 reg.DeleteValue(RdString);
end;
Finally
Val.Free;
end;
Finally
Reg.Free;
end;
end;

Мысля появилась создать некий редактор реестра, т.к. в последнее время вирусы одалели моих знакомых, которые пишут в реестр блокировки разного рода, после чего стандартными средствами не добраться... а вот через win32api можно ))))))
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Велосипед не изобретай всевозможных мониторов реестра уже давно и много понаписанно
[syntax=Delphi] [/syntax]
Ответить