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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2010, 15:01   #1
Aleksey1989
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 127
По умолчанию Работа с реестром

Здаравствуйте. Объясните, пожалуйста, какой раздел открывается следующим кодом:
1.
Код:
 reg:=TRegistry.Create;
 reg.RootKey:=HKEY_CLASSES_ROOT;
 reg.OpenKey('\',false);
2. Что значит раздел реестра Insertable?
Aleksey1989 вне форума Ответить с цитированием
Старый 13.11.2010, 15:21   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

1. Никакой. Это - ветвь.
2. Резервируется некоторыми программами на всякий случай.
mihali4 вне форума Ответить с цитированием
Старый 13.11.2010, 15:44   #3
Aleksey1989
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 127
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
1. Никакой. Это - ветвь.
1. Т.е. этой процедурой раскрывается ветвь HKEY_CLASSES_ROOT?
А если не раскрыть ветвь, то стало быть reg.GetKeyNames(Keys); не будет работать. Я правильно мыслю???

2. И ещё вопросик: если я вызываю метод CloseKey, то если до этого, допустим, было открыто HKEY_CLASSES_ROOT-->CLSID-->00022601-0000-0000-C000-000000000046, то вызвав после этого метод openkey я буду выбирать из 1-го уровня раздела HKEY_CLASSES_ROOT или я буду выбирать из CLSID?

Последний раз редактировалось Aleksey1989; 13.11.2010 в 16:22.
Aleksey1989 вне форума Ответить с цитированием
Старый 13.11.2010, 16:27   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Этой процедурой определяется один из главных разделов реестра, с содержимым (подветвями) которого мы собираемся работать.
На форуме полно примеров, я не понимаю ваших затруднений.
mihali4 вне форума Ответить с цитированием
Старый 13.11.2010, 16:48   #5
Aleksey1989
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 127
По умолчанию

Про CloseKey я ничего найти не смог: он встречается во многих темах, но ответа на мой вопрос (если я вызываю метод CloseKey, то если до этого, допустим, было открыто HKEY_CLASSES_ROOT-->CLSID-->00022601-0000-0000-C000-000000000046, то вызвав после этого метод openkey я буду выбирать из 1-го уровня раздела HKEY_CLASSES_ROOT или я буду выбирать из CLSID?) там нет.

Прекращайте ненужное цитирование предыдущих сообщений!
Рекомендую. Помимо общих правил форума есть и дополнения к ним в каждом разделе...
А кроме кнопки "Цитата" внизу есть простое окно для ввода своего сообщения.
Или маленькая кнопочка "Быстрый ответ" справа от кнопки "Цитата".
Попадаете туда же.
Модератор

Последний раз редактировалось mihali4; 13.11.2010 в 17:12.
Aleksey1989 вне форума Ответить с цитированием
Старый 13.11.2010, 17:12   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Елы-палы... А попробовать самому ?
mihali4 вне форума Ответить с цитированием
Старый 13.11.2010, 17:17   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Всегда после открытия reg.OpenKey нужно вызывать reg.closekey.

Reg.OpenKey открывает заданную тобою ветвб реестра и читает то что там записано, ключи реестра.

После чего нужно закрыть эту ветвь и идти дальше. Закрывать нужно чтобы программа не пыталась открыть новую ветвб в уже открытой. Возникают всякие Av что нежелательно...

Код:
var
  Reg: TRegistry; //Реестр
  RegKey: string; //ветвь
begin
    Reg := TRegistry.Create; //Выделяем память для юзания
      Reg.RootKey := HKEY_LOCAL_MACHINE; //Категория
      RegKey := 'SYSTEM\CurrentControlSet\Control\Windows'; //ветвь
      if Reg.OpenKey(RegKey, False) then //если открыли ключ
      begin
        if Reg.ValueExists('ErrorMode') then //если нашли параметр
        begin
//Что-то делаем
        end else 
      Reg.CloseKey;  //Если не нашли параметр, закрываем ветвь, возвращаемся к ROOT
      end else
      Reg.CloseKey; //Если не открыли или не нашли ветвь, то закрываем и возвращаемя к ROOT

{...}
FreeAndNil(Reg);
Нужно для начала один раз отрезать, а если неолучилось то тогда спрашивать=)

На форуме были подобные темы, типо почему программа выдаёт AV при работе с реестром.

Последний раз редактировалось Человек_Борща; 13.11.2010 в 17:19.
Человек_Борща вне форума Ответить с цитированием
Старый 13.11.2010, 17:29   #8
Aleksey1989
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 127
По умолчанию

В смысле отрезать?
Aleksey1989 вне форума Ответить с цитированием
Старый 14.11.2010, 08:17   #9
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Цитата:
Сообщение от Aleksey1989 Посмотреть сообщение
В смысле отрезать?
В том смысле, что перед этим семь раз отмерить. Пробуй, экспериментируй, читай литературу, дерзай! Не надо задавать абстрактных вопросов.
Баламут вне форума Ответить с цитированием
Старый 14.11.2010, 13:04   #10
baster128
Форумчанин
 
Аватар для baster128
 
Регистрация: 24.04.2010
Сообщений: 205
По умолчанию

Сдается мне reg.OpenKey('\',false); пытаешься открыть ключ. которого в реестре нет отсюда ошибка. Проверить надо if Reg.KeyExists('\') then
baster128 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с реестром Claster Помощь студентам 3 30.09.2009 15:21
работа с реестром Sharp_eye Помощь студентам 8 21.06.2009 00:05
Работа с реестром Pr1meEX Общие вопросы Delphi 0 17.06.2009 00:01
работа с реестром zetrix Безопасность, Шифрование 2 31.10.2007 12:20
Работа с реестром. eL1tE Общие вопросы Delphi 5 16.04.2007 15:48