Создание Windows-приложений на основе Visual C#

         

Сохранение настроек приложения в реестре операционной системы


Реестр — это база данных, содержащая конфигурационные сведения операционной системы. Основным средством просмотра и редактирования реестра служит специализированная утилита "Редактор реестра". Для ее запуска открываем окно "Выполнить" (Пуск —> Выполнить или используем сочетание клавиш Windows+R) и набираем regedit. Запустившийся редактор содержит шесть корневых разделов (ветвей), краткое описание которых приводится в таблице 3.3.

Таблица 3.3. Основные разделы реестра операционной системы Windows

HKEY_CLASSES_ROOTСодержится информация о зарегистрированных в Windows типах файлов (что и позволяет открывать их по двойному щелчку), классах и их свойствах
HKEY_CLASSES_ROOTСодержится информация о зарегистрированных в Windows типах файлов (что и позволяет открывать их по двойному щелчку), классах и их свойствах
HKEY_CURRENT_USERСодержатся настройки оболочки пользователя (например, Рабочего стола, меню "Пуск" и др.). Если на компьютере работает один пользователь и используется обычный вход в Windows, то значения раздела берутся из подраздела HKEY_USERS\.DEFAULT
HKEY_LOCAL_MACHINEСодержится информация, относящаяся к компьютеру: драйверы, установленное программное обеспечение и его настройки
HKEY_USERSСодержит настройки оболочки Windows для всех пользователей. Именно из этого раздела информация копируется в раздел HKEY_CURRENT_USER. Все изменения в HKCU (сокращенное название раздела HKEY_CURRENT_USER) автоматически переносятся в HKU
HKEY_CURRENT_CONFIGCодержится информация о конфигурации устройств Plug&Play и сведения о конфигурации компьютера с переменным составом аппаратных средств
HKEY_DYN_DATAСодержатся динамические данные о состоянии различных устройств, установленных на компьютере пользователя

Конечным элементом дерева реестра являются ключи или параметры, среди которых можно выделить три основных типа:

  • строковые (например, "C:\Program Files");
  • двоичные (например. 06 31 B2 8C). Максимальная длина такого ключа 16Кб;
  • тип DWORD. Этот тип ключа занимает 4 байта и отображается в шестнадцатеричном и в десятичном виде (например, 0x00000001 (1) — в скобках указано десятичное значение ключа).


Реестр — это база данных, содержащая конфигурационные сведения операционной системы. Основным средством просмотра и редактирования реестра служит специализированная утилита "Редактор реестра". Для ее запуска открываем окно "Выполнить" (Пуск —> Выполнить или используем сочетание клавиш Windows+R) и набираем regedit. Запустившийся редактор содержит шесть корневых разделов (ветвей), краткое описание которых приводится в таблице 3.3.

Таблица 3.3. Основные разделы реестра операционной системы Windows

HKEY_CLASSES_ROOTСодержится информация о зарегистрированных в Windows типах файлов (что и позволяет открывать их по двойному щелчку), классах и их свойствах
HKEY_CLASSES_ROOTСодержится информация о зарегистрированных в Windows типах файлов (что и позволяет открывать их по двойному щелчку), классах и их свойствах
HKEY_CURRENT_USERСодержатся настройки оболочки пользователя (например, Рабочего стола, меню "Пуск" и др.). Если на компьютере работает один пользователь и используется обычный вход в Windows, то значения раздела берутся из подраздела HKEY_USERS\.DEFAULT
HKEY_LOCAL_MACHINEСодержится информация, относящаяся к компьютеру: драйверы, установленное программное обеспечение и его настройки
HKEY_USERSСодержит настройки оболочки Windows для всех пользователей. Именно из этого раздела информация копируется в раздел HKEY_CURRENT_USER. Все изменения в HKCU (сокращенное название раздела HKEY_CURRENT_USER) автоматически переносятся в HKU
HKEY_CURRENT_CONFIGCодержится информация о конфигурации устройств Plug&Play и сведения о конфигурации компьютера с переменным составом аппаратных средств
HKEY_DYN_DATAСодержатся динамические данные о состоянии различных устройств, установленных на компьютере пользователя

Конечным элементом дерева реестра являются ключи или параметры, среди которых можно выделить три основных типа:

  • строковые (например, "C:\Program Files");
  • двоичные (например. 06 31 B2 8C). Максимальная длина такого ключа 16Кб;
  • тип DWORD. Этот тип ключа занимает 4 байта и отображается в шестнадцатеричном и в десятичном виде (например, 0x00000001 (1) — в скобках указано десятичное значение ключа).




Основным классом для работы с реестром ( создание новых ключей, их удаление и изменение) в библиотеке .NET Framework является RegistryKey. Описание некоторых методов этого класса приводится в таблице 3.4.



Таблица 3.4. Некоторые методы класса RegistryKeyМетодОписание
МетодОписание
CreateSubKeyСоздание нового параметра реестра или открытие существующего. Название не чувствительно к регистру
DeleteSubKeyУдаление существующего параметра
DeleteSubKeyTreeУдаление существующего раздела и вложенных подразделов
DeleteValueУдаление значения существующего параметра
OpenSubKeyПолучение значения парметра только для чтения
SetValueУстановка значения
GetValueПолучение значения параметра
CloseЗакрывание параметра и запись его содержимого на постоянной основе


Вернемся к сохранению настроек приложения — теперь для записи размеров формы мы будем создавать и использовать ключи реестра. Создайте новое Windows-приложение и назовите его RegistrySettings. Подключаем пространство имен для работы с классом RegistryKey:

using Microsoft.Win32;

Снова создаем класс FormSize:

public class FormSize { public int height; public int width; }

В обработчике события Closing формы создаем раздел реестра RegApplication, в котором будут храниться данные:



private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e) { FormSize frmSize = new FormSize(); frmSize.height = this.Height; frmSize.width = this.Width; //Открываем раздел RegApplication RegistryKey regkey = Registry.CurrentUser.OpenSubKey ("SOFTWARE\\Microsoft\\RegApplication", true); //Если раздел не обнаружен, создаем его if (regkey ==null) { RegistryKey newregkey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft", true); regkey = newregkey.CreateSubKey("RegApplication"); } //Записываем значения ширины и высоты формы в ключи Height и Width regkey.SetValue("Height", frmSize.height); regkey.SetValue("Width", frmSize.width); }

Запускаем приложение, изменяем размер, закрываем его и добавляем обработчик для события Load формы:



private void Form1_Load(object sender, System.EventArgs e) { FormSize frmSizeSetup = new FormSize(); // Открываем раздел реестра RegistryKey regkey = Registry.CurrentUser.OpenSubKey ("SOFTWARE\\Microsoft\\RegApplication"); //Получаем значения ключей Height и Width frmSizeSetup.height = Convert.ToInt32(regkey.GetValue("Height")); frmSizeSetup.width = Convert.ToInt32(regkey.GetValue("Width")); //Устанавливаем текущие значения ширины и высоты формы this.Height = frmSizeSetup.height; this.Width = frmSizeSetup.width; }

При перезапуске приложения его измененный размер сохраняется. В реестре появился раздел RegApplication, в котором и находятся два ключа Height и Width со значениями размеров формы в пикселях (рис. 3.21):


увеличить изображение
Рис. 3.21.  Раздел RegApplication с двоичными ключами Height и Width

На диске, прилагаемом к книге, вы найдете приложение RegistrySettings (Code\Glava3\ RegistrySettings).



Основным классом для работы с реестром ( создание новых ключей, их удаление и изменение) в библиотеке .NET Framework является RegistryKey. Описание некоторых методов этого класса приводится в таблице 3.4.



Таблица 3.4. Некоторые методы класса RegistryKeyМетодОписание
МетодОписание
CreateSubKeyСоздание нового параметра реестра или открытие существующего. Название не чувствительно к регистру
DeleteSubKeyУдаление существующего параметра
DeleteSubKeyTreeУдаление существующего раздела и вложенных подразделов
DeleteValueУдаление значения существующего параметра
OpenSubKeyПолучение значения парметра только для чтения
SetValueУстановка значения
GetValueПолучение значения параметра
CloseЗакрывание параметра и запись его содержимого на постоянной основе


Вернемся к сохранению настроек приложения — теперь для записи размеров формы мы будем создавать и использовать ключи реестра. Создайте новое Windows-приложение и назовите его RegistrySettings. Подключаем пространство имен для работы с классом RegistryKey:

using Microsoft.Win32;

Снова создаем класс FormSize:

public class FormSize { public int height; public int width; }

В обработчике события Closing формы создаем раздел реестра RegApplication, в котором будут храниться данные:

private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e) { FormSize frmSize = new FormSize(); frmSize.height = this.Height; frmSize.width = this.Width; //Открываем раздел RegApplication RegistryKey regkey = Registry.CurrentUser.OpenSubKey ("SOFTWARE\\Microsoft\\RegApplication", true); //Если раздел не обнаружен, создаем его if (regkey ==null) { RegistryKey newregkey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft", true); regkey = newregkey.CreateSubKey("RegApplication"); } //Записываем значения ширины и высоты формы в ключи Height и Width regkey.SetValue("Height", frmSize.height); regkey.SetValue("Width", frmSize.width); }

Запускаем приложение, изменяем размер, закрываем его и добавляем обработчик для события Load формы:



private void Form1_Load(object sender, System.EventArgs e) { FormSize frmSizeSetup = new FormSize(); // Открываем раздел реестра RegistryKey regkey = Registry.CurrentUser.OpenSubKey ("SOFTWARE\\Microsoft\\RegApplication"); //Получаем значения ключей Height и Width frmSizeSetup.height = Convert.ToInt32(regkey.GetValue("Height")); frmSizeSetup.width = Convert.ToInt32(regkey.GetValue("Width")); //Устанавливаем текущие значения ширины и высоты формы this.Height = frmSizeSetup.height; this.Width = frmSizeSetup.width; }

При перезапуске приложения его измененный размер сохраняется. В реестре появился раздел RegApplication, в котором и находятся два ключа Height и Width со значениями размеров формы в пикселях (рис. 3.21):


увеличить изображение
Рис. 3.21.  Раздел RegApplication с двоичными ключами Height и Width

На диске, прилагаемом к книге, вы найдете приложение RegistrySettings (Code\Glava3\ RegistrySettings).


Содержание раздела