Tregistry

Тема в разделе "Delphi - FAQ", создана пользователем Jeefo, 10 дек 2007.

  1. Jeefo

    Jeefo Гость

    возник вопрос по работе с реестром, а именно: не пойму как возвращаться на один уровень вверх. то есть например нахожусь в ключе "HKEY_CURRENT_USER\Software\Opera Software\", а мне нужно попасть обратно в "HKEY_CURRENT_USER\Software\". как?
     
  2. Barmutik

    Barmutik Гость

    Сделать OpenKey нужного Вам ключа ...
     
  3. Jeefo

    Jeefo Гость

    ну например нахожусь я в ключе A. в этом ключе есть еще два ключа - B и C. я делаю reg.OpenKey(B, false). теперь я в ключе B. записываю какие то нужные мне данные, а теперь мне требуется попасть в ключ C. если я просто сделаю OpenKey(C, false), то программа будет искать ключ в B (то есть в том ключе, в котором я нахожусь). а мне то нужен ключ, располагающийся в A. у меня есть вариант сделать CloseKey и потом заново пройти весь путь до A, но может быть есть более простой способ? что то типа "вернуться на уровень вверх"?
     
  4. root

    root Гость

    Для: Jeefo
    RTFM =RegEnumKey(Key: HKey; index: Longint; Buffer: PChar;cb: Longint): Longint;) ->index=счетчик
     
  5. Jeefo

    Jeefo Гость

    Для: root

    а не могли бы вы написать какой нибудь простейший примерчик с этой функцией, например про то, что я в #3 посте сказал? а то не разберусь, как это работает :)
     
  6. root

    root Гость

    Для: Jeefo
    OK
    Пример не мой но суть такая
    Код (Text):
    procedure TForm1.Button1Click(Sender: TObject);
    var
    MyKey: HKey; { Handle для работы с разделом }
    Buffer : array[0..1000] of char; { Буфер }
    Err, { Код ошибки }
    index : longint; { Индекс подраздела }
    begin
    Err:=RegOpenKey(HKEY_CLASSES_ROOT,'DelphiUnit',MyKey); { Открыли раздел }
    if Err<> ERROR_SUCCESS then
    begin
    MessageDlg('Нет такого раздела !!',mtError,[mbOk],0);
    exit;
    end;
    index:=0;
    {Определили имя первого подраздела }
    Err:=RegEnumKey(MyKey,index,Buffer,Sizeof(Buffer));
    while err=ERROR_SUCCESS do { Цикл, пока есть подразделы }
    begin
    memo1.lines.add(StrPas(Buffer)); { Добавим имя подраздела в список }
    inc(index); { Увеличим номер подраздела }
    Err:=RegEnumKey(MyKey,index,Buffer,Sizeof(Buffer)); { Запрос }
    end;
    RegCloseKey(MyKey); { Закрыли подраздел }
    end;
     
  7. Jeefo

    Jeefo Гость

    Для: root
    спасибо, разберусь
     
  8. root

    root Гость

    Для: Jeefo
    + в репу :)
     
  9. Jeefo

    Jeefo Гость

    вот вопр такой возник. я как понял в делфи для работы с реестром можно использовать TRegistry, TRegIniFile и еще можно пользоваться процедурами, начинающимися на Reg (ну вот RegEnumKey например, то что перед этим обсуждалось). что такое TRegistry и TRegIniFile я понимаю, это типы, можно объявлять относящиеся к ним переменные и потом использовать функции и процедуры этих типов. а вот что собой представляют функции и процедуры, начинающиеся на Reg? к чему они относятся? чем отличаются от TRegistry и TRegIniFile (вроде с ними те же функции делать можно)?
     
  10. Silver Wind

    Silver Wind Гость

    Функции начинающиеся на Reg - это WinAPI функции для работы с реестром (родные, так сказать, для Windows). Ну а классы в Delphi TRegistry, TRegIniFile - это т.н. классы-обертки над родными WinAPI функциями Windows.
    Открой исходный код модуля Registry и увидишь, что эти классы лишь предоставляют более удобный способ работы с реестром и сами используют для доступа к реестру Reg* функции.
     
  11. Jeefo

    Jeefo Гость

    Для: Silver Wind
    То бишь разница в использовании заключается лишь в удобстве для программиста? Спасибо за объяснение
     

Поделиться этой страницей