Язык программирования Delphi. Работа с реестром на низком уровне:
Мне уже несколько раз приходили вопросы от программистов Windows NT типа: "Почему, когда я создаю ключи в реестре с помощью TRegIniFile все ключи строковые, хотя я хочу создать целое число". Некоторые думают, что это глюк Delphi, но это не глюк, а специфика TRegIniFile. Если ты хочешь, чтобы твои проги правильно работали с реестром в любой ОС, то эта статья для тебя.
Объект TRegIniFile работает с реестром на высоком уровне так, как будто он работает с ini файлом. Если ты не застал Win3.11, то напомню, ini файлы - это файлы конфигурации, которые уже устарели и используются только для совмеситмости со старым софтом. Сейчас для этих целей есть реестр. TRegIniFile - объект, который позволяет работать с реестром как с ini файлом. А так, как файл может содержать только строки, то и объект работает со строками. Так что реально, TRegIniFile все данные сохраняет и читает из реестра в виде строк. Только после чтения строки происходит преобразование в формат указанный тобой.
Реестр, в отличии от ini файлов - это база данных. Поэтому она позволяет реально хранить не только строки, но и числа, и данные, и логические операторы. Если ты хочешь, чтобы данные сохранялись и читались в виде типов отличных от строк, то ты должен работать через TRegistry. Он так же объявлен в модуле registry, поэтому ты должен подключать этот модуль в раздел uses.
Работа с TRegistry проктически такая же, как и с TRegIniFile:
var
Reg:TRegistry;
begin
Reg:=TRegIniFile.Create; //Инициализация
Reg.RootKey:=HKEY_LOCAL_MACHINE;//Выбираю корень реестра
//По умолчанию это HKEY_CURRENT_USER
Reg.OpenKey('SYSTEM', true); //Открываю раздел SYSTEM
Reg.OpenKey('CurrentControlSet', true);//Открываю раздел CurrentControlSet
Reg.OpenKey('Control', true);
Reg.OpenKey('Session Manager', true);
Reg.OpenKey('Memory Management', true);
//Записываю параметр ClearPageFileAtShutdown
Reg.WriteInteger('ClearPageFileAtShutdown', 112);
//Читаю параметр Hidden
RegIni.ReadInteger('Hidden')
Reg.CloseKey;//Закрываю ключ
Reg.Free; //Освобождаю объект
end;
В этом примере чтение и запись будет происходить с числами, а не со строками с последующим преобразованием в число. Всё очень просто, даже больше, чем просто.