Главная страница
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.48 MB
Время: 0.089 c
3-1142000660
Exciter
2006-03-10 17:24
2006.05.07
Fb1.5 Как разрешить юзеру ввести в поле


2-1145271172
scamp_
2006-04-17 14:52
2006.05.07
про графы


8-1131182811
Lisa
2005-11-05 12:26
2006.05.07
Создание компонента


2-1145336717
vegarulez
2006-04-18 09:05
2006.05.07
Как из фомы 1 передать занчение параметры в форму 2?


4-1139505659
EarlVadim
2006-02-09 20:20
2006.05.07
Консоль (через CreateProcess) не может достучаться в Интернет