Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.05.07;
Скачать: CL | DM;

Вниз

Реестр Windows   Найти похожие ветки 

 
zaN0za ©   (2006-02-12 21:28) [0]

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

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

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

const
 KeyName = "MyKey"

var
 Key: HKEY;

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

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

end;


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


 
begin...end ©   (2006-02-12 21:35) [1]

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


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

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

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 выдает пустую строку... Что я делаю не правильно?


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

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


 
begin...end ©   (2006-02-13 11:30) [4]

> 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


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

uses Registry



Страницы: 1 вся ветка

Текущий архив: 2006.05.07;
Скачать: CL | DM;

Наверх




Память: 0.45 MB
Время: 0.011 c
4-1139574743
Udaff
2006-02-10 15:32
2006.05.07
Список Com-портов


1-1143550418
.Кирилл
2006-03-28 16:53
2006.05.07
Здравствуйте! Можно ли TabSheet скрыть?


2-1145382665
Lex Luthor
2006-04-18 21:51
2006.05.07
Dspack


15-1144973253
Дмитрий_177
2006-04-14 04:07
2006.05.07
Отключить на ноутбуке энергосберегающий режим


15-1144903122
BorisMor
2006-04-13 08:38
2006.05.07
Работа в Новосибирске





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский