Главная страница
    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
1-1143727351
MegaVolt
2006-03-30 18:02
2006.05.07
Range Check Error


3-1142424440
Sollo
2006-03-15 15:07
2006.05.07
dbExpress + QReport


15-1145012682
tsa
2006-04-14 15:04
2006.05.07
Синхронизация часов компьютера


2-1145423929
Shick
2006-04-19 09:18
2006.05.07
Ау-у!


15-1144840037
ronyn
2006-04-12 15:07
2006.05.07
Комп не грузится после SP2





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский