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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.07.2007, 22:44   #1
DelphiFun
 
Регистрация: 26.07.2007
Сообщений: 6
Вопрос Cохранить в файл значение заданного имени, тип REG_BINARY. Работа с реестром Windows.

Ни магу понять! Помогите, пожалуйста!
Вот, есть такой код:
Код:
function RegReadInt(Root,Key,Name:string):integer;
Var R:TRegistry;
begin
R:=TRegistry.Create;
If Root = 'HKCU' then R.RootKey:=HKEY_Current_User;
If Root = 'HKLM' then R.RootKey:=HKEY_Local_Machine;
If Root = 'HKUS' then R.RootKey:=HKEY_Users;
If Root = 'HKCR' then R.RootKey:=HKEY_Classes_Root;
If Root = 'HKCC' then R.RootKey:=HKEY_Current_Config;
R.OpenKey(Key,true)
result:=R.ReadInteger(Name)
end;
ну и т.д. , а как работает ни магу понять.

Hадо бы сохранить в файл значение заданного имени, тип REG_BINARY, ну или хотябы увидеть на экране.
Если можно пример напишите пожалуйста, который работает.
DelphiFun вне форума Ответить с цитированием
Старый 27.07.2007, 23:51   #2
ZhekON
Форумчанин
 
Аватар для ZhekON
 
Регистрация: 24.01.2007
Сообщений: 323
По умолчанию

а что тут непонятного?
1.Осуществляется выбор Root'а, тоесть каталога в реестре
2.Открывается ключ
3.Считываются данные
а причом здесь REG_BINARY? в коде невижу такого.
Задай конкретный вопрос! а не так чтобы мы догадывались что тебе именно нужно...
Всё проще чем вы думаете, нужно только правильно подойти к тому или иному вопросу?

Последний раз редактировалось ZhekON; 27.07.2007 в 23:54.
ZhekON вне форума Ответить с цитированием
Старый 28.07.2007, 09:31   #3
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Запишем разные настройки в реестр
Код:
procedure TfrmMain.ReadParams;
  var reg: TRegIniFile;
begin
   reg := TRegIniFile.Create('Software\MyProg');
   reg.RootKey := HKEY_CURRENT_USER;
   edit1.Text := reg.ReadString('Options','edit1',edit1.Text);
   ListBox1.ItemIndex := reg.ReadInteger('Options','ListBox1',ListBox1.ItemIndex);
   CheckBox1.Checked := reg.ReadBool('Options','CheckBox1',CheckBox1.Checked);
   DateTimePicker1.Date := reg.ReadDate('Options','DateTimePicker1',DateTimePicker1.Date);
   Time1.Time := reg.ReadTime('Options','Time1',Time1.Time);
   DatTime1.DateTime := reg.ReadDateTime('Options','DatTime1',DatTime1.DateTime);
   TableSumma.Value := reg.ReadFloat('Options','TableSumma',TableSumma.Value);
   reg.free
end;

procedure TfrmMain.WriteParams;
  var reg: TRegINIFile;
begin
   reg := TRegIniFile.Create('Software\MyProg');
   reg.RootKey := HKEY_CURRENT_USER;
   reg.WriteString('Options','edit1',edit1.Text);
   reg.WriteInteger('Options','ListBox1',ListBox1.ItemIndex);
   reg.WriteBool('Options','CheckBox1',CheckBox1.Checked);
   reg.WriteDate('Options','DateTimePicker1',DateTimePicker1.Date);
   reg.WriteTime('Options','Time1',Time1.Time);
   reg.WriteDateTime('Options','DatTime1',DatTime1.DateTime);
   reg.WriteFloat('Options','TableSumma',TableSumma.Value);
   reg.free
end;
Есть еще парочка функций, которые почему-то мало кто использует. Это запись и чтение многострочного текста:
При записи строки пропускаем ее через функцию
Код:
function StrToIniStr(const Str: string): string;
var
  Buffer: array[0..4095] of Char;
  B, S: PChar;
begin
  if Length(Str) > SizeOf(Buffer) then
    raise Exception.Create('Текст слишком большой для добавления в INI файл');
  S := PChar(Str);
  B := Buffer;
  while S^ <> #0 do
    case S^ of
      #13, #10:
        begin
          if (S^ = #13) and (S[1] = #10) then Inc(S)
          else if (S^ = #10) and (S[1] = #13) then Inc(S);
          B^ := '\';
          Inc(B);
          B^ := 'n';
          Inc(B);
          Inc(S);
        end;
    else
      B^ := S^;
      Inc(B);
      Inc(S);
    end;
  B^ := #0;
  Result := Buffer;
end;
При чтении строки пропускаем ее через функцию
Код:
function IniStrToStr(const Str: string): string;
var
  Buffer: array[0..4095] of Char;
  B, S: PChar;
begin
  if Length(Str) > SizeOf(Buffer) then
    raise Exception.Create('Строка для чтения из INI файла');
  S := PChar(Str);
  B := Buffer;
  while S^ <> #0 do
    if (S[0] = '\') and (S[1] = 'n') then
    begin
      B^ := #13;
      Inc(B);
      B^ := #10;
      Inc(B);
      Inc(S);
      Inc(S);
    end
    else
    begin
      B^ := S^;
      Inc(B);
      Inc(S);
    end;
  B^ := #0;
  Result := Buffer;
end;
_SERGEYX_ вне форума Ответить с цитированием
Старый 30.07.2007, 01:20   #4
DelphiFun
 
Регистрация: 26.07.2007
Сообщений: 6
По умолчанию

Допустим в реестре есть такая папка: HKCU\Software\***\gaga\, вот в ней значит лежат двоичные параметры (REG_BINARY)( ну эти самые ключи), список именн, допустим есть такое имя proba, так вот необходимо увидеть на экране или записать в файл.txt ЗНАЧЕНИЕ этого имени (proba). Само значение в 16ой СС находится - это я так просто сказал и вот эти числа надо увидеть на экране, либо записать в ткст-эшный файл.
DelphiFun вне форума Ответить с цитированием
Старый 30.07.2007, 01:36   #5
DelphiFun
 
Регистрация: 26.07.2007
Сообщений: 6
По умолчанию

Насчет кода:
Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  Windows, Registry, SysUtils;

function RegReadInt(Root,Key,Name:string):integer;
Var R:TRegistry;
begin
R:=TRegistry.Create;
If Root = 'HKCU' then R.RootKey:=HKEY_Current_User;
If Root = 'HKLM' then R.RootKey:=HKEY_Local_Machine;
If Root = 'HKUS' then R.RootKey:=HKEY_Users;
If Root = 'HKCR' then R.RootKey:=HKEY_Classes_Root;
If Root = 'HKCC' then R.RootKey:=HKEY_Current_Config;
R.OpenKey(Key,true);
result:=R.ReadInteger(Name);
end;

begin
Root:='HKCU';
key:='Software\***\gaga\';  // туда ли я вписал?
name:='proba';              // туда ли я вписал?
RegReadInt(Root,Key,Name); // ?? незнаю что тут делать, ф-я запускается
writeln('Вот сюда что-то надо написать, чтобы это гребаное значение пошло на экран');
readln;
end.
//итого: не пашет ,как я хочу, пожалуйста объясните !
вопщем вот, только не смейтесь
DelphiFun вне форума Ответить с цитированием
Старый 30.07.2007, 02:51   #6
oLMeR
Повелитель Тьмы
Пользователь
 
Аватар для oLMeR
 
Регистрация: 29.10.2006
Сообщений: 95
По умолчанию

могу предположить что в пути в реестре нельзя использовать символ *
Я учусь как положено, а положено у меня на всё
oLMeR вне форума Ответить с цитированием
Старый 30.07.2007, 09:08   #7
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

RegReadInt(Root,Key,Name);
и где же у вас результат сохраняется ? в воздухе ?
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 30.07.2007, 22:56   #8
DelphiFun
 
Регистрация: 26.07.2007
Сообщений: 6
По умолчанию

Вот так чтоли?

Код:
program Project3;

{$APPTYPE CONSOLE}

uses
  Windows, Registry, SysUtils;
var x:integer;    Root,Key,Name:string;

function RegReadInt(Root,Key,Name:string):integer;
Var R:TRegistry;
begin
R:=TRegistry.Create;
If Root = 'HKCU' then R.RootKey:=HKEY_Current_User;
If Root = 'HKLM' then R.RootKey:=HKEY_Local_Machine;
If Root = 'HKUS' then R.RootKey:=HKEY_Users;
If Root = 'HKCR' then R.RootKey:=HKEY_Classes_Root;
If Root = 'HKCC' then R.RootKey:=HKEY_Current_Config;
R.OpenKey(Key,true);
result:=R.ReadInteger(Name);
end;

begin
Root:='HKCU';
key:='Software\GNU\ffdshow';
name:='dlgPosX';
x:=RegReadInt(Root,Key,Name);
writeln(x);
readln;
end.
ошибка: External exception C0000029
DelphiFun вне форума Ответить с цитированием
Старый 31.07.2007, 08:36   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Сообщение от DelphiFun Посмотреть сообщение
Hадо бы сохранить в файл значение заданного имени, тип REG_BINARY, ну или хотябы увидеть на экране.
Так ты должен вытягивать бинарку через ReadBinaryData а не через ReadInteger. И сохранять через Writeln врядли такой тип получится.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.08.2007, 21:36   #10
DelphiFun
 
Регистрация: 26.07.2007
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Так ты должен вытягивать бинарку через ReadBinaryData а не через ReadInteger. И сохранять через Writeln врядли такой тип получится.
можешь функцию подкинуть?
DelphiFun вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с реестром Родион Безопасность, Шифрование 1 23.06.2008 11:05
работа с реестром zetrix Безопасность, Шифрование 2 31.10.2007 12:20
Работа с реестром Хs-You Безопасность, Шифрование 9 16.08.2007 22:09
работа с реестром. kozei Win Api 6 17.07.2007 13:31