Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.25;
Скачать: CL | DM;

Вниз

Как из реестра прочитать стринговое значение...   Найти похожие ветки 

 
Reals ©   (2002-10-15 18:31) [0]

Помогите пожалуйста, столкнулся с такой проблемой.
Работаю с реестром, значения читаю из реестра при момощи функции
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.

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


 
MBo ©   (2002-10-15 18:34) [1]

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


 
Reals ©   (2002-10-15 18:45) [2]

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


 
MBo ©   (2002-10-15 18:51) [3]

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


 
Reals ©   (2002-10-15 19:02) [4]

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


 
MBo ©   (2002-10-15 19:08) [5]

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



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

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

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


 
Reals ©   (2002-10-16 11:38) [7]

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

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


 
han_malign ©   (2002-10-16 12:25) [8]

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



Страницы: 1 вся ветка

Текущий архив: 2002.11.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.023 c
14-83005
Красная Майка
2002-10-18 13:57
2002.11.25
Встреча мастаков в Московии.


1-82753
Alexey
2002-11-15 13:15
2002.11.25
преобразование даты


4-83047
Фукс
2002-10-13 16:47
2002.11.25
блокировка Win-комбинаций


4-83064
x4y
2002-10-13 12:49
2002.11.25
Список запущенных процессов с полным путем


14-83006
AL2002
2002-11-07 13:13
2002.11.25
Налоговая рулит