Форум: "WinAPI";
Текущий архив: 2002.09.16;
Скачать: [xml.tar.bz2];
ВнизГлючит 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.09.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c