Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.05.07;
Скачать: [xml.tar.bz2];

Вниз

Реестр 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.05.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.01 c
15-1144305632
McSimm
2006-04-06 10:40
2006.05.07
Цитирование. помогайте, пожалуйста.


11-1124588005
UFO
2005-08-21 05:33
2006.05.07
Декодер PNG размером 6-8 килобайт


10-1118573883
SerJ23
2005-06-12 14:58
2006.05.07
определение номера абзаца


15-1145023037
iamdanil
2006-04-14 17:57
2006.05.07
Глюк винды (фотка)


2-1145365284
ZZZ_ZZZ
2006-04-18 17:01
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский