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

Вниз

Глючит RegEnumValues   Найти похожие ветки 

 
Cobalt ©   (2002-07-20 12:08) [0]

Пытаюсь перебрать параметры ключа HKEY_LOCAL_MACHINE.(Всего их там у меня 2:
"IE State"=dword:00000000
"FullLogging"="No")

Procedure AddValues(HK:HKEY;K_Id:integer);
var CntValues, vType, MaxNameLen, MaxDataLen:Cardinal;
i, NameLen, BufLen:Cardinal;
Buf:Pointer;
VName,s:string;
begin
if RegQueryInfoKey(HK,nil,nil,nil, nil,nil,nil,@CntValues,@MaxNameLen,@MaxDataLen,nil,nil)<>ERROR_SUCCESS
then begin
ShowMessage(SysErrorMessage(GetLastError)); exit;
end;
if CntValues<1 then exit;
for i:= 0 to CntValues-1 do
begin //MaxNameLen - does not include the terminating null character
NameLen:=MaxNameLen+1; // include the terminating null character.
SetLength(VName,NameLen);
BufLen:=MaxDataLen;
Buf:=AllocMem(BufLen);
if RegEnumValue(HK,i,PChar(VName),NameLen, nil,@vType,@Buf,@BufLen)<>ERROR_SUCCESS
then begin
ShowMessage(SysErrorMessage(GetLastError));
exit;
end;
SetLength(VName,NameLen);//обязательно!!!
VName:=VName+"Type = "+IntToStr(vType)+" Size = "+IntToStr(BufLen);
Form1.ListBox1.Items.Add(VName);
FreeMem(Buf);

end;
end;


Так вот, имена параметров возвращаются нормально, а вот со значениями - напряг. При первом проходе возвращает в Buf NIL, грит, "ошибки нет, все ОК!"
При втором проходе тоже ок, но Buf не обнуляется, а при FreeMem(Buf); выскакивает АВ.


 
Cobalt ©   (2002-07-20 12:33) [1]

Попробовал использовать RegQueryValue, все равно возвращает nil, и, сволочь, грит - "Все ОК!"

NameLen:=MaxNameLen+1; // include the terminating null character.
SetLength(VName,NameLen);
if RegEnumValue(HK,i,PChar(VName),NameLen, nil,@vType,nil,nil)<>ERROR_SUCCESS
then begin
ShowMessage(SysErrorMessage(GetLastError));
exit;
end; //получаем только имя параметра
SetLength(VName,NameLen);//обязательно!!!
BufLen:=MaxDataLen;
Buf:=AllocMem(BufLen);
if RegQueryValueEx(HK,PChar(VName),nil,@vType,@Buf,@BufLen)<>ERROR_SUCCESS
then begin
ShowMessage(SysErrorMessage(GetLastError));
exit;
end;
VName:=VName+"Type = "+IntToStr(vType)+" Size = "+IntToStr(BufLen);
Form1.ListBox1.Items.Add(VName);
FreeMem(Buf);


 
Cobalt ©   (2002-07-20 14:25) [2]

Если читаю DWord-ы, то ок. но как только появляется string или binary, то начинаются сплошь АВ


 
Случайный прохожий   (2002-07-21 20:11) [3]

А вот так не пробовал?
if RegQueryValueEx(HK,PChar(VName),nil,@vType, Buf,@BufLen)<>ERROR_SUCCESS
И хелп бы почитал. Заодно.
ЗЫ А зачем тебе вообще буфер, если ты его не используешь? Поставь нил и все дела.


 
Cobalt ©   (2002-07-21 23:10) [4]

И так (RegQueryValueEx(HK,PChar(VName),nil,@vType,Buf,@BufLen))
я тоже пробовал, тоже грит - еррор.
Попробовал как в TRegistry - через дополнит. проц-ру, ошибку уже не возвращает.
Буду разбираться...


 
Случайный прохожий   (2002-07-22 09:38) [5]

Не ну ты фрукт! Не стыдно врать?


 
Cobatl   (2002-07-22 14:26) [6]

Не, это почему же врать?
Я действительно так попробовал, и тоже вернула ошибку ("неправильный параметр")
А потом перестала...


 
Случайный прохожий   (2002-07-22 21:46) [7]

Дык я ж твою функцию с исправленным буф тока-что погонял по реестру - никаких ошибок!

> А потом перестала...

Чудеса! В решете.


 
Cobalt ©   (2002-07-23 18:52) [8]

>Случайный прохожий
Извиняюсь. Дико.
Я был не прав.



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

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

Наверх




Память: 0.48 MB
Время: 0.012 c
1-50793
KPY
2002-08-29 07:44
2002.09.16
Шифрация !


1-50738
Down
2002-09-05 17:32
2002.09.16
Статус файла


3-50655
firsor1
2002-08-27 12:10
2002.09.16
Чтобы использовать ShellExecute что должно быть в uses..


1-50693
Sherbacov
2002-09-04 17:55
2002.09.16
DOS и TMEMO


1-50779
DDDeN
2002-09-03 13:00
2002.09.16
Контекстное меню