Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Реестр Windows


zaN0za ©   (2006-02-12 21:28:00) 

Доброго времени суток.

У меня такой вопрос:

я хочу получить значение определенного ключа реестра

const
 KeyName = 'MyKey'

var
 Key: HKEY;

begin
 RegOpenKeyEx(HKEY_CURRENT_USER, 'SOFTWARE\MySoft', 0, KEY_ALL_ACCESS, TempKey);
 // здесь есть ключ 'MyKey'

 // как мне получить его значение?
 // если можно с примером

end;


Спасибо за внимание.


Игорь Шевченко   (2006-02-13 12:03:00) [1]

uses Registry


begin...end   (2006-02-13 11:30:00) [2]

> zaN0za ©   (13.02.06 00:46) [2]

Во-первых, см. [3] -- перед получением значения параметра нужно выяснить, сколько это значение занимает места в памяти.

Нужно это для того, чтобы выделить нужное количество памяти под буфер, в который это значение будет помещено. Поэтому (и это во-вторых) надо добавить ещё и код выделения/освобождения памяти для буфера.

В-третьих, для открытия подключа в его имени не надо первым символом указывать '\'.

И, наконец, в-четвёртых: параметра 'TaskSwitchXP' в указанном разделе реестра моей XP нет.
:о)

Но если у Вас он есть, то код может быть примерно таким:

var
 RegKey: HKEY;
 Buffer: PChar;
 Size: DWORD;
begin
 if RegOpenKeyEx(
   HKEY_LOCAL_MACHINE,
   'Software\Microsoft\Windows\CurrentVersion\Run',
   0,
   KEY_QUERY_VALUE, // А действительно ли здесь нужен полный доступ?
   RegKey) = ERROR_SUCCESS then
 begin
   RegQueryValueEx(RegKey, 'TaskSwitchXP', nil, nil, nil, @Size);
   GetMem(Buffer, Size);
   try
     if RegQueryValueEx(RegKey, 'TaskSwitchXP', nil, nil, PByte(Buffer), @Size) = ERROR_SUCCESS then
       MessageBox(0, Buffer, 'Test', 0)
   finally
     FreeMem(Buffer)
   end
 end
end


frame   (2006-02-13 01:26:00) [3]

Допиши это после RegOpenKeyEx(...) :
RegQueryValueEx(RegKey, 'TaskSwitchXP', nil, nil, nil, @dwSize);


zaN0za   (2006-02-13 00:46:00) [4]

Пытаюсь сделать таким образом:

procedure ReadKeyValue;
var
 RegKey : HKEY;
 Buffer : PChar;
 dwSize : DWORD;

begin
 dwSize := SizeOf(PChar);

 RegOpenKeyEx(HKEY_LOCAL_MACHINE,
              '\Software\Microsoft\Windows\CurrentVersion\Run',
              0, KEY_ALL_ACCESS, RegKey);

 RegQueryValueEx(RegKey, 'TaskSwitchXP', nil, nil, Pbyte(Buffer), @dwSize);

 RegCloseKey(RegKey);

 MessageBox(0, Buffer, 'Test', 0);

end;


MessageBox выдает пустую строку... Что я делаю не правильно?


begin...end   (2006-02-12 21:35:00) [5]

RegQueryValueEx. Пример см. в исходнике метода TRegistry.GetData (модуль Registry).


Наверх

Титульная страница Поиск, карта сайта Написать письмо