Главная страница
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.47 MB
Время: 0.031 c
2-1145522700
Zaq123
2006-04-20 12:45
2006.05.07
Как создать текстовый файл с кодовой страницей 866?


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


2-1145417723
Tans
2006-04-19 07:35
2006.05.07
Привет, мастера!!


15-1144846025
Курдль
2006-04-12 16:47
2006.05.07
Америка глазами программиста


15-1145048960
Asics777
2006-04-15 01:09
2006.05.07
AV v.1.5 - Видео проигрыватель вскоре будет как Light Alloy !