![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Реестр 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).