УЧЕБНЫЕ МАТЕРИАЛЫ ПО ПРОГРАММИРОВАНИЮ, КРЕКИНГУ, HTML, CSS, ОФИСНЫМ ПРИЛОЖЕНИЯМ
Доступ к реестру
ЗАДАЧА
Сохранять параметры в реестре Windows и получать их
оттуда.
РЕШЕНИЕ
Используйте классы Registry и
RegistryKey из пространства имен
Microsoft.Win32.
ОБСУЖДЕНИЕ
C# предоставляет неограниченный доступ к реестру
Windows при помощи классов Registry и
RegistryKey. Исходной точкой для доступа к реестру
Windows служит класс Registry: он включает
общие (public) поля, возвращающие объекты RegistryKey
для путей реестра первого уровня (или базовых разделов реестра).
Важнейшими являются два поля.
После получения объекта RegistryKey вы можете, применив похожий на пути синтаксис, перейти на более глубокие вложенные уровни реестра и установить/получить отдельные ею параметры. Обычно приложения хранят параметры в подразделе \Software\CompanyName\ProductName или \Software\CompanyName\ProductName\Category базового раздела реестра. Чтобы получить объект RegistryKey для вложенного раздела реестра, вызовите метод RegistryKey.OpenSubKey. Для открытия раздела в режиме, допускающем запись, в метод OpenSubKey нужно передать необязательный параметр True:
RegistryKey Key; Key = Registry.CurrentUser.OpenSubKey("Software\\MyCompany\\MyApp", true);
Для записи параметра в реестр применяется метод SetValue, а для получения — GetValue. Параметры реестра обычно извлекаются в форме строк:
string Value; // Извлечение параметра MyValueName. Value = (string)Key.GetValue("MyValueName"); // Сохранение параметра MyValueName. Key.SetValue("MyValueName", Value);
Доступ приложения к реестру можно реализовать по-разному. Вы можете получать все параметры при запуске приложения и сохранять их при его закрытии или получать и сохранять параметры по требованию. В основе класса RegistryData лежит второй подход. При создании экземпляра класса (и раздела реестра при необходимости) он получает ссылку на указанный объект RegistrуКеу. Для извлечения параметров из реестра и их записи служат процедуры получения и установки свойства:
На форме создать кнопку.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace RegistryTestForm { public partial class Form1 : Form { // Эта команда создает раздел реестра в случае надобности RegistryData RegistryData = new RegistryData(); public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { OpenFileDialog dlgOpen = new OpenFileDialog(); // Получение параметра реестра или пути по умолчанию dlgOpen.InitialDirectory = RegistryData.DefaultDocumentPath; // Отображение диалогового окна Open // с первоначальным каталогом по умолчанию. dlgOpen.ShowDialog(); // Выбрано ли имя файла? if (dlgOpen.FileName == "") { // Была щелкнута кнопка Cancel. Ничего не делаем. } else { // В реестре сохраняется каталог, содержащий данный файл. RegistryData.DefaultDocumentPath = System.IO.Path.GetDirectoryName(dlgOpen.FileName); // (Теперь вы можете выполнять над файлом определенные действия.) } } } }
В проекте создать новый класс RegistryData.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.Win32; using System.Windows.Forms; // !!! namespace RegistryTestForm { class RegistryData { private RegistryKey Key; private const string RegistryPath = "Software\\TestCompany\\TestApp\\"; public string DefaultDocumentPath { set { Key.SetValue("DefaultDocumentPath", value); } get { return (string)Key.GetValue("DefaultDocumentPath", Application.StartupPath); } } public RegistryData() { Key = Registry.CurrentUser.OpenSubKey(RegistryPath, true); if (Key == null) { // Раздел не существует. Выполняетсая его создание. Key = Registry.CurrentUser.CreateSubKey(RegistryPath); } } } }
Используемая литература: