![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Использование функции RegQueryValueEx() [D7, WinXP]
Варяг © (2005-12-27 22:29:00)Вопрос заключатся в следующем при вызове функции RegQueryValueEx(),
возникает ошибка которая связана с неправильным указание параметров.
RegQueryValueEx(Hkey:HKEY,lpValueName:PansiChar,
lpReserved:Pointer,lpType:PDWORD,lpData:PByte,
lpcbData:PDWORD);
где по моему пониманию:
Hkey - дескриптор раздела;
lpValueName-имя считываемого параметра;
lpReserved- указатель на что-то ???
lpType- тип параметра(REG_SZ,REG_DWORD и т.д. );
lpData- буфер под значение переменной;-?
lpcbData- размер буфера;-?
Проблема заключается в следующем:
1) при указании lpType = REG_SZ пишет "Несовместимые типы Integer и PDWORD "
но при замене на nil ошибка уходит,но странность RegSetvalueEx()
воспринимала REG_SZ без проблем !?
2) lpData,lpcbData - объявляю переменную Data, и как результат пишет ошибку
совместимости типов Integer и PDWORD .
Привожу пример кода, может кто знает как помочь?
Function RegEdit:boolean ;
Var
MyKey:HKey;
Error:LongInt;
Data:byte;
Begin
Error:= RegOpenKey(HKEY_CURRENT_USER,PChar('Control Panel\Desktop'),MyKey);
Error:= RegQueryValueEx(MyKey,PChar('Wallpaper'),0,nil,Data, SizeOf(Data);
if Error=ERROR_SUCCESS Then ShowMessage('ok')
Else ShowMessage('no') ;
Else ShowMessage('No');
RegDeleteKey(MyKey);
end;
Sumor (2005-12-28 00:20:00) [1]lpType и lpData это указатели на соответствующие данные, в первом случае указатель на место, куда система запишет тип ключа, во втором случае на данные, например на строчку с завершающим нулём.
Function RegEdit:boolean ;
Var
MyKey:HKey;
Error:LongInt;
Data:PByte;
DType : DWORD;
Begin
GetMem(Data, 256);
Error:= RegOpenKey(HKEY_CURRENT_USER,PChar('Control Panel\Desktop'),MyKey);
Error:= RegQueryValueEx(MyKey,PChar('Wallpaper'),0,&DType,Data, 256);
if Error=ERROR_SUCCESS Then ShowMessage('ok')
Else ShowMessage('no') ;
Else ShowMessage('No');
RegDeleteKey(MyKey);
FreeMem(Data);
end;