Форум: "Основная";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];
ВнизНе могу записать значение в реестр Найти похожие ветки
← →
Alex_Bredin © (2004-11-24 11:13) [0]Написал небольшой модуль для облегчения работы с реестром(чтение\запись значений ключей). В одной программе все прекрасно работает. В другой- при вызове той же функции вываливает ERegistryException -не могу записать данные для такого-то параметра. Правда, в первом случае это приложение, во втором- пакет. Есть ли здесь какие-то грабли?
код на всякий случай
unit RegistryUtils;
interface
uses Registry,Variants,Windows;
const RRoot = HKEY_CURRENT_USER;
// finds the key,if not found, returns default
// returns value as variant
function ReadRegistryKeyValue(RegistryKey:string;Param:string;Default:variant):variant;
// finds the key,if not found, creates one & sets its value,
// returns false if failed
function WriteRegistryKeyValue(RegistryKey:string;Param:string;Value:variant):boolean;
// deletes the key
procedure DeleteRegistryKey(RegistryKey:string);
implementation
var vRegistry:Tregistry;
//---------------------------------------------------------------- WriteRegistryKeyValue
function WriteRegistryKeyValue(RegistryKey:string;Param:string;Value:variant): boolean;
var
vt: integer;
begin
vt:=VarType(Value);
vRegistry.CloseKey;
if vRegistry.OpenKey(RegistryKey,true) then
begin
try
case vt of
varInteger,varByte,varSmallint: vRegistry.WriteInteger(Param,integer(Value));
varString: vRegistry.WriteString(Param,vartostr(Value));
varBoolean: vRegistry.WriteBool(Param,boolean(Value));
end;
Result:=true;
except
Result := false;
end;
vRegistry.CloseKey;
end
else
Result:=false;
end;
//------------------------------------------------------------ ReadRegistryKeyValue
function ReadRegistryKeyValue(RegistryKey:string;Param:string;Default:variant):variant;
var
vt: integer;
begin
Result:=Default;
vt:=VarType(Default);
vRegistry.CloseKey;
try
if vRegistry.OpenKeyReadOnly(RegistryKey) then
if vRegistry.ValueExists(Param) then
case vt of
varInteger,varByte, varSmallint: Result:=vRegistry.ReadInteger(Param);
varString: Result:=vRegistry.ReadString(Param);
varBoolean: Result:=vRegistry.ReadBool(Param);
end;
except
end;
vRegistry.CloseKey;
end;
//------------------------------------------------------------DeleteRegistryKey
procedure DeleteRegistryKey(RegistryKey:string);
begin
//
end;
initialization
vRegistry:=TRegistry.Create;
vRegistry.RootKey:=RRoot;
finalization
vRegistry.Free;
e
← →
TUser © (2004-11-24 11:15) [1]Наверное, не хватает полномочий.
← →
Alex_Bredin © (2004-11-24 11:40) [2]Разобрался.
Почему-то для каждого обращения(по крайней мере, для записи) вингдоза требует создания нового объекта TRegistry. Использование вышеприведенного подхода (многократного обращения к одному экземпляру)не прокатывает.
← →
TUser © (2004-11-24 12:14) [3]
> Почему-то для каждого обращения(по крайней мере, для записи)
> вингдоза требует создания нового объекта TRegistry.
Разве?
И еще - а где ты указываешь RootKey?
← →
Jay (2004-11-24 12:34) [4]Я пробовал как-то работать с реестром, у меня была подобная ошибка, когда делаешь OpenKey, RootKey переприсваивает на путь указаный в OpenKey, и никакие попытки его изменения ничего не давали
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.039 c