Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как из реестра прочитать стринговое значение... [D6, Win2k, WinXP]


Reals ©   (2002-10-15 18:31:00) 

Помогите пожалуйста, столкнулся с такой проблемой.
Работаю с реестром, значения читаю из реестра при момощи функции
RegQueryValueEx(). Значения типы DWORD читаються без проблем, а вот значения типа STRING не читаються, то ошибка какая-то выходит, то переменная просто пустая. Но на самом деле параметр в реестре существует.
Подскажите кто знает в чем может быть ошибка.
Вот кусок кода:
if RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\Run", 0, KEY_READ, RK) = ERROR_SUCCESS then
begin
SizeRun := 4;
D1 := REG_SZ;
if RegQueryValueEx(RK, "MyProgram", nil, @D1, @ValueRun, @SizeRun) = ERROR_SUCCESS then
SendMessage(chkBox, BM_SETCHECK, 1, 0) else SendMessage(chkBox, BM_SETCHECK, 0, 0);
RegCloseKey(RK);
end;


P.S. Главное это нужно сделать на WinAPI.

Заранее премного благодарен.


han_malign   (2002-10-16 12:25:00) [1]

1. Никаких @ не надо
2. примерно так:
RegQueryValueEx(RK, "MyProgram", nil, @D1, nil, @SizeRun);
SetLength(ValueRun,SizeRun);
RegQueryValueEx(RK, "MyProgram", nil, @D1, PChar(ValueRun), @SizeRun);
ValueRun:=PChar(ValueRun);//обрубаем треминирующий #0


Reals   (2002-10-16 11:38:00) [2]

2MBo: Может есть примерчик как это сделать, а то по разному (и без @, и с @S[1]) пробывал ничего не получаеться, переменная пустая и все, хотя результат = ERROR_SUCCESS, а длина строки мне известна.

2Vit@ly: TRegistry мне не подходит, так как с подключением модуля Registry размер файла сразу увеличиваеться на 100Kb. А мен это не нужно. И я в курсе что с ним намного проще, всегда с ним работал. Да и программку мне нужно написать на чистом API, я это подчеркивал.


Vit@ly   (2002-10-15 20:38:00) [3]

Не очень понятна тема конференции (WinAPI), если вы пишите код в Делфи
Где-то (возможно в глобальных переменных) описать REG и Str
REG : TRegistry;
Str: String;
/////////////////////////
А дальше без особых проблем
REG.OpenKey("Здесь путь к реестру",true "или False - разберешься");
Похоже у тебя "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
//Хотя Run это папка, а не параметр
Str:= REG.ReadString("Имя параметра");
В Str получишь значение параметра ключа в виде String (если я правильно понял вопрос)

Нужны пояснения, намыль!


MBo   (2002-10-15 19:08:00) [4]

Объявлять ее как String и так обращаться
а) неправильно - надо без @ или @S[1]
б) вредно - откуда программа узнает, какая длина этой строки????


Reals   (2002-10-15 19:02:00) [5]

Она объялена как String, Но как PChar я тоже пробовал и без @


MBo   (2002-10-15 18:51:00) [6]

Как объявлена ValueRun?
Если PChar, то @ не надо


Reals   (2002-10-15 18:45:00) [7]

В переменной ValueRun должно находиться значение из реестра.
А что я перемудрил? Точно такое же работает если тип DWORD


MBo   (2002-10-15 18:34:00) [8]

что-то ты с @ перемудрил


Наверх

Титульная страница Поиск, карта сайта Написать письмо