Delphi работа с реестром из сервиса. Путь в реестре для деинсталляции программ

30.10.2019 Windows

Что такое реестр в Windows?

Если не вдаваться в подробности, а дать доступное определение, то:

Реестр в современных версиях Windows можно назвать базой данных операционной системы. База предназначена, чтобы хранить настройки Windows и приложений.

Если, Вы раньше не сталкивались с таким понятием, то настоятельно рекомендую почитать какую-нибудь литературу. Я же сейчас буквально в двух словах расскажу тот минимум, который понадобится, чтобы работать с реестром средствами Delphi .

Назначение разделов реестра.

Все данные, хранящиеся в реестре, разбиты на четыре группы:

  • HKEY_CLASSES_ROOT (в сокращении HKCR) - в этом разделе хранятся ассоциации между приложениями и расширениями файлов. Проще говоря – какие файлы открывать той или иной программой.
  • HKEY_CURRENT_USER – содержит данные о пользователе. В этой ветке можно посмотреть адрес рабочего стола и других пользовательских директорий.
  • HKEY_LOCAL_MACHINE - в данном разделе реестра хранятся информация о глобальных аппаратных и программных настройках системы.
  • HKEY_USERS – содержит индивидуальные настройки каждого пользователя.
  • HKEY_CURRENT_CONFIG – данные о конфигурации компьютера.

В каждом разделе реестра хранятся ключи, каждый из которых, может иметь подключи.

Каждый ключ реестра обладает следующими параметрами:

  1. Имя параметра
  2. Тип параметра
  3. Значение

Итак, основные понятия, связанные с реестром Windows, мы просмотрели. Пора приступать непосредственно к программированию.

Работа с Реестров в Delphi

Для работы с реестром мы будем использовать уже готовый объект TRegIniFile. Чтобы этот объект стал нам доступен, необходимо в разделе uses подключить модуль Registry.

Итак, я считаю, что нагляднее всего будет написать небольшое приложение. Программа будет сохранять или считывать введенное нами значение в реестр. Набросаем форму.

В первое поле будем вводить переменную, которую хотим сохранить. Во второе окно будем выводить значение, считанное из реестра. Делать это будем по нажатию соответствующих кнопок.

Разберем, что происходит по нажатию кнопки BSave:

procedure TForm1. BSave Click(Sender: TObject); var FReestr: TRegIniFile; // Определяем переменную begin FReestr:=TRegIniFile.Create("software"); // Инициализируем FReestr.OpenKey("MyProg",true); // Открываем нужный ключ FReestr.WriteString("value1","test",ESave.Text); // Заносим значение FreeAndNil(FReestr); // Уничтожаем переменную end;

Вначале мы определяем переменную типа TRegIniFile. Затем инициализируем её, для этого вызываем метод Create. По умолчанию нам откроется ветвь HKEY_CURRENT_USER. А параметр конструктора ("software") говорит нам о том, что мы сразу перейдем в одноименный раздел ветви. Если в конструктор не передавать никакого значения, то ничего страшного не произойдет. Просто после инициализации мы окажемся в корне основной ветви. Если Вам нужна другая ветвь реестра, то после инициализации переменной присвойте параметру RootKey соответствующее значение.

Например:

FReestr.RootKey:= HKEY_CLASSES_ROOT;

После инициализации мы должны добраться до интересующего нас подраздела – метод OpenKey . Метод имеет два параметра: имя подраздела и признак того нужно ли создавать раздел, если его не существует. Процедуру OpenKey можно вызывать столько раз, сколько нужно, пока не доберетесь до нужной подсекции.

Теперь мы можем перейти непосредственно к записи . WriteString – вот что нам поможет. Передадим в него три параметра:

  1. Название подсекции
  2. Название параметра
  3. Значение

Обратите внимание, что метод называется WriteString – он служит для записи строк , если нужно записать число используйте WriteInteger, ну и так далее по аналогии.

После того, как значение сохранено, можем удалять переменную.

FreeAndNil(FReestr);

По нажатию кнопки BLoadпроисходит следующее:

procedure TForm1.BLoadClick(Sender: TObject); var FReestr: TRegIniFile; begin FReestr:=TRegIniFile.Create("software"); FReestr.OpenKey("MyProg",true); ELoad.Text:=FReestr.ReadString("value1","test","Не прочитал"); FreeAndNil(FReestr); end;

Все очень похоже, за исключением метода FReestr.ReadString. Этот метод считывает из ключа "value1", параметр "test", если такого параметра нет или, его не удалось считать, то присваивается значение "Не прочитал".

Основы работы с реестром в DelphiВам теперь известны, если нужно что-то дополнительно объяснить – задавайте свои вопросы в комментариях ниже.

1. Создать новый документ, поместить его в папку Windows/ShellNew

2. В редакторе реестра найти расширение этого файла, добавить новый подключ, добавить туда строку: FileName в качестве значения которой указать имя созданного файла.

Путь к файлу который открывает не зарегистрированные файлы

1. Найти ключ HKEY_CLASSES_ROOT\Unknown\Shell

2. Добавить новый ключ Open

3. Под этим ключом еще ключ с именем command в котором изменить значение (По умолчанию) на имя запускаемого файла, к имени нужно добавить %1. (Windows заменит этот символ на имя запускаемого файла)

В проводнике контекстное меню "Открыть в новом окне"

1. Найти ключ HKEY_CLASSES_ROOT\Directory\Shell

2. Создать подключ: opennew в котором изменить значение (По умолчанию) на: "Открыть в новом окне"

3. Под этим ключом создать еще подключ command (По умолчанию) = explorer %1

Использование средней кнопки мыши Logitech в качестве двойного щелчка

Подключ HKEY_LOCAL_MACHINE\SoftWare\Logitech и там найти параметр DoubleClick заменить 000 на 001

Новые звуковые события

Например создает звуки на запуск и закрытие WinWord

HKEY_CURRENT_USER\AppEvents\Shemes\Apps добавить подключ WinWord и к нему подключи Open и Close.

Теперь в настройках звуков видны новые события

Путь в реестре для деинсталяции программ:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall

Работа с реестром в Delphi 1

В Delphi 2 и выше появился объект TRegistry при помощи которого очень просто работать с реестром. Но мы здесь рассмотрим функции API, которые доступны и в Delphi 1.

Реестр предназначен для хранения системных переменных и позволяет зарегистрировать файлы программы, что обеспечивает их показ в проводнике с соответствующей иконкой, вызов программы при щелчке на этом файле, добавление ряда команд в меню, вызываемое при нажатии правой кнопки мыши над файлом. Кроме того, в реестр можно внести некую свою информацию (переменные, константы, данные о инсталлированной программы...). Программу можно добавить в список деинсталляции, что позволит удалить ее из менеджера "Установка/Удаление программ" панели управления.

Для работы с реестром применяется ряд функций API:

RegCreateKey (Key: HKey; SubKey: PChar; var Result: HKey): Longint;

Создать подраздел в реестре. Key указывает на "корневой" раздел реестра, в Delphi1 доступен только один - HKEY_CLASSES_ROOT, в в Delphi3 - все. SubKey - имя раздела - строится по принципу пути к файлу в DOS (пример subkey1\subkey2\ ...). Если такой раздел уже существует, то он открывается (в любом случае при успешном вызове Result содержит Handle на раздел). Об успешности вызова судят по возвращаемому значению, если ERROR_SUCCESS, то успешно, если иное - ошибка.

RegOpenKey(Key: HKey; SubKey: PChar; var Result: HKey): Longint;

Открыть подраздел Key\SubKey и возвращает Handle на него в переменной Result. Если раздела с таким именем нет, то он не создается. Возврат - код ошибки или ERROR_SUCCESS, если успешно.

RegCloseKey(Key: HKey): Longint;

Закрывает раздел, на который ссылается Key. Возврат - код ошибки или ERROR_SUCCESS, если успешно.

RegDeleteKey(Key: HKey; SubKey: PChar): Longint;

Удалить подраздел Key\SubKey. Возврат - код ошибки или ERROR_SUCCESS, если нет ошибок.

RegEnumKey(Key: HKey; index: Longint; Buffer: PChar;cb: Longint): Longint;

Получить имена всех подразделов раздела Key, где Key - Handle на открытый или созданный раздел (см. RegCreateKey и RegOpenKey), Buffer - указатель на буфер, cb - размер буфера, index - индекс, должен быть равен 0 при первом вызове RegEnumKey. Типичное использование - в цикле While, где index увеличивается до тех пор, пока очередной вызов RegEnumKey не завершится ошибкой (см. пример).

RegQueryValue(Key: HKey; SubKey: PChar; Value: PChar; var cb: Longint): Longint;

Возвращает текстовую строку, связанную с ключом Key\SubKey.Value - буфер для строки; cb- размер, на входе - размер буфера, на выходе - длина возвращаемой строки. Возврат - код ошибки.

RegSetValue(Key: HKey; SubKey: PChar; ValType: Longint; Value: PChar; cb: Longint): Longint;

Задать новое значение ключу Key\SubKey, ValType - тип задаваемой переменной, Value - буфер для переменной, cb - размер буфера. В Windows 3.1 допустимо только Value=REG_SZ. Возврат - код ошибки или ERROR_SUCCESS, если нет ошибок.

{ Создаем список всех подразделов указанного раздела } procedure TForm1.Button1Click(Sender: TObject); var MyKey: HKey; { Handle для работы с разделом } Buffer: array of char; { Буфер } Err, { Код ошибки } index: longint; { Индекс подраздела } begin Err:=RegOpenKey(HKEY_CLASSES_ROOT,"DelphiUnit",MyKey); { Открыли раздел } if Err<> ERROR_SUCCESS then begin MessageDlg("Нет такого раздела!!",mtError,,0); exit; end; index:=0; {Определили имя первого подраздела } Err:=RegEnumKey(MyKey,index,Buffer,Sizeof(Buffer)); while err=ERROR_SUCCESS do { Цикл, пока есть подразделы } begin memo1.lines.add(StrPas(Buffer)); { Добавим имя подраздела в список } inc(index); { Увеличим номер подраздела } Err:=RegEnumKey(MyKey,index,Buffer,Sizeof(Buffer)); { Запрос } end; RegCloseKey(MyKey); { Закрыли подраздел } end;

Объект INIFILES - работа с INI файлами.

Почему иногда лучше использовать INI-файлы, а не реестр?

  • 1. INI-файлы можно просмотреть и отредактировать в обычном блокноте.
  • 2. Если INI-файл хранить в папке с программой, то при переносе папки на другой компьютер настройки сохраняются. (Я еще не написал ни одной программы, которая бы не поместилась на одну дискету:)
  • 3. Новичку в реестре можно запросто запутаться или (боже упаси), чего-нибудь не то изменить.

Поэтому для хранения параметров настройки программы удобно использовать стандартные INI файлы Windows. Работа с INI файлами ведется при помощи объекта TIniFiles модуля IniFiles. Краткое описание методов объекта TIniFiles дано ниже.

Constructor Create("d:\test.INI");

Создать экземпляр объекта и связать его с файлом. Если такого файла нет, то он создается, но только тогда, когда произведете в него запись информации.

WriteBool(const Section, Ident: string; Value: Boolean);

Присвоить элементу с именем Ident раздела Section значение типа boolean

WriteInteger(const Section, Ident: string; Value: Longint);

Присвоить элементу с именем Ident раздела Section значение типа Longint

WriteString(const Section, Ident, Value: string);

Присвоить элементу с именем Ident раздела Section значение типа String

ReadSection (const Section: string; Strings: TStrings);

ReadSectionValues(const Section: string; Strings: TStrings);

EraseSection(const Section: string);

Удалить раздел Section со всем содержимым

ReadBool(const Section, Ident: string; Default: Boolean): Boolean;

ReadInteger(const Section, Ident: string; Default: Longint): Longint;

ReadString(const Section, Ident, Default: string): string;

Закрыть и освободить ресурс. Необходимо вызвать при завершении работы с INI файлом

Property Values: string;

Доступ к существующему параметру по имени Name

Procedure TForm1.FormClose(Sender: TObject); var IniFile:TIniFile; begin IniFile:= TIniFile.Create("d:\test.INI"); { Создали экземпляр объекта } IniFile.WriteBool("Options", "Sound", True); { Секция Options: Sound:=true } IniFile.WriteInteger("Options", "Level", 3); { Секция Options: Level:=3 } IniFile.WriteString("Options" , "Secret password", Pass); { Секция Options: в Secret password записать значение переменной Pass } IniFile.ReadSection("Options ", memo1.lines); { Читаем имена переменных} IniFile.ReadSectionValues("Options ", memo2.lines); { Читаем имена и значения } IniFile.Free; { Закрыли файл, уничтожили объект и освободили память } end;

Из книги Реестр Windows автора Климов Александр

Из книги Тонкости реестра Windows Vista. Трюки и эффекты автора Клименко Роман Александрович

1.3. Общие правила работы с реестром Редактировать системный реестр можно вручную или с помощью специально предназначенных утилит. Порядок использования утилит описан в гл. 5. Здесь же мы подробнее остановимся на редактировании вручную.Ручное редактирование системного

Из книги Реестр Windows автора Климов А

Глава 5 Утилиты для работы с реестром Твикеры реестра Дефрагментация реестра Очистка реестра Редакторы реестра Мониторинг реестраРассматривая в предыдущих главах различные трюки, которые выполняются с использованием реестра Windows Vista, мы вносили необходимые

Из книги Советы по Delphi. Версия 1.0.6 автора Озеров Валентин

Утилиты для работы с реестром RegClean 4.1a RegClean – это утилита от Майкрософт для работы с реестром. Рекомендуется для содержания реестра в надлежащем порядке Что делает RegClean?RegClean анализирует ключи реестра, расположенные в разделе HKEY_CLASSES_ROOT и находит ключи, содержащие

Из книги Интернет решения от доктора Боба автора Сворт Боб

Разработчик Delphi Русскоязычные N Сервер Описание 1 http://www.inprise.ru Российское представительство Inprise Фирма – разработчик

Из книги Windows Script Host для Windows 2000/XP автора Попов Андрей Владимирович

1.3.3. Delphi и CGI В данной главе я расскажу, как написать простое Дельфи CGI приложение, без использования Web Modules или других Client/Server модулей.Во первых аббревиатура CGI означает Common Gateway Interface, и это только имя для передачи информации от клиента серверу. На клиентской стороне это

Из книги Системное программирование в среде Windows автора Харт Джонсон М

Из книги 500 лучших программ для Windows автора Уваров Сергей Сергеевич

ГЛАВА 3 Усовершенствованные средства для работы с файлами и каталогами и знакомство с реестром Файловые системы обеспечивают не только простую последовательную обработку файлов; кроме этого, они должны предоставлять возможности прямого доступа к файлам и блокирования

Из книги Windows Vista. Трюки и эффекты автора Зозуля Юрий

Управление системным реестром Функции управления реестром позволяют запрашивать и изменять данные, относящиеся к парам "имя-значение", а также создавать новые подразделы и новые пары "имя-значение". Как для указания существующих разделов, так и для создания новых

Из книги Реестр Windows 7 автора Климов Александр Петрович

Работа с реестром Мозговой центр операционной системы Windows - реестр. В процессе работы пользователь постоянно устанавливает и удаляет различные утилиты, внося новые записи в реестр. Часто программы, уже удаленные из системы, оставляют в реестре различный мусор в виде

Из книги Виртуальная библиотека Delphi автора

1.4. Работа с реестром Windows Vista Общие сведения о системном реестреВсе системные и пользовательские настройки операционная система хранит в специальной базе данных, которая называется системным реестром. Кроме операционной системы, реестр также использует прикладные