Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.07.2009, 19:32   #1
omezik
Новичок
Джуниор
 
Регистрация: 07.07.2009
Сообщений: 3
По умолчанию TRegistry WriteBinaryData и ReadBinaryData

Нужно считать а потом записать данные из реестра с помощью TRegistry и методами WriteBinaryData(значение, буфер, кол-во символов в буфере) и ReadBinaryData (значение, буфер, кол-во символов в буфере)
Написал две функций:

Код:
//Функция для считывание бинарных значений из реестра (передать переменные с путем и параметром реестра)
int reg_reading_bin(AnsiString root, AnsiString dur, AnsiString name)
{ TRegistry *reg = new TRegistry(KEY_ALL_ACCESS);
// выбираем нужный корень
reg->RootKey = GetPViodFromStrKey(root);
// открываем секцию
reg->OpenKey(dur.c_str(), true);
// Если ветка существует, то
if (reg->ValueExists(name))
{
int znachenie;
int binarydat;
reg->ReadBinaryData(name, &binarydat,sizeof(DWord));
znachenie = binarydat;
// закрываем секцию
//reg->CloseKey();
//Возвращаем значение функций
return (znachenie);}
}


//Функция для сохранения бинарных значений из реестра (передать переменные с путем и параметром реестра)
DWord reg_save_bin(AnsiString root, AnsiString dur, AnsiString name, AnsiString znachenie)
{ TRegistry *reg = new TRegistry(KEY_ALL_ACCESS);
// выбираем нужный корень
reg->RootKey = GetPViodFromStrKey(root);
// открываем секцию
reg->OpenKey(dur.c_str(), true);
// Если ветка существует, то
if (reg->ValueExists(name))
{
DWord binarydat = znachenie[1];
reg->WriteBinaryData(name, &binarydat,sizeof(DWord));
//Возвращаем значение функций
return (binarydat);}
}

вызываю и записываю следующими деиствиями
//запись
AnsiString a25 = "HKEY_LOCAL_MACHINE";
AnsiString b25 = "SYSTEM\\CurrentControlSet\\Control\\FileSystem\\CDFS";
AnsiString c25 = "CacheSize";
int d25;
bool e25;
e25 = CheckBox25->Checked;
if (e25 == true) {d25 = 00;} else {d25 = 0;}
reg_save_bin (a25,b25,c25,d25);

//чтение
AnsiString a25 = "HKEY_LOCAL_MACHINE";
AnsiString b25 = "SYSTEM\\CurrentControlSet\\Control\\FileSystem\\CDFS";
AnsiString c25 = "CacheSize";
AnsiString t25;
t25 = reg_reading_bin (a25,b25,c25);
ShowMessage (t25);
Не пойму как правильно сделать, полученный результат чтения из реестра присваиваю переменной и пытаюсь опять записать тудаже было например ff 00 00 00 после чтения присвоился результат 255 его записываю а получаю 35 00 00 00 в реестре в чем дело помогите если кто понимает в этом лутше меня может я буфер не правильно использую, заранее спасибо за помощь!

1) не могу определится с типом передаваймых переменных
2) на функцию чтения и записи не ругается так как значение возврощается
3) Может у кого есть готовая функций или ссылка на сайт

Последний раз редактировалось Sazary; 07.07.2009 в 22:46.
omezik вне форума Ответить с цитированием
Старый 07.07.2009, 20:25   #2
omezik
Новичок
Джуниор
 
Регистрация: 07.07.2009
Сообщений: 3
Радость

Код:
procedure TForm1.Button1Click(Sender: TObject);
const
  ValueAr: array [1..40] of Byte =( $01,$01,$01,$02,$00,$00,$00,$00,
                       			        $00,$a0,$00,$00,$00,$00,$00,$00,
                            			  $00,$40,$01,$00,$00,$00,$00,$00,
                                  	$00,$80,$02,$00,$00,$00,$00,$00,
			                              $00,$00,$05,$00,$00,$00,$00,$00);
var
  Reg: TRegistry;
  buf : array [0..39] of Byte;
  i: Integer;
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CURRENT_USER;
    if Reg.OpenKey('\Control Panel\Mouse', True) then
    begin
    	for I := 0 to 39 do
        buf[i] := ValueAr[I + 1];
      Reg.WriteBinaryData('Value', buf, sizeof(buf));
      Reg.CloseKey;
    end;
  finally
    Reg.Free;
  end;
end;
Вот эту строчку кода кто нибуть переделал бы я был бы очень благодарен !!! А то с++ я не очень силен!!!

Последний раз редактировалось Sazary; 07.07.2009 в 22:47.
omezik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TRegistry.Rootkey не определяеться rainbow Общие вопросы Delphi 2 06.11.2008 08:49
TRegistry photozaz Общие вопросы Delphi 5 19.09.2008 09:09
Функция Tregistry.keyexists не работает Ozerich Общие вопросы Delphi 5 18.09.2008 09:42
ReadBinaryData komex Общие вопросы Delphi 3 03.08.2008 19:37