Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Работа с реестром в С#


Автор: bc0der 8.7.2006, 20:35
Привет , вот написал статейку по работе с реестром в .NET (на С#) , поскольку сам интересовался программированием реестра в .NET .

Оцените : http://www.csharpcoder.narod.ru/reg.pdf  

Автор: mr.DUDA 8.7.2006, 22:38
Зачем в пдф ?  smile  

Автор: Void 8.7.2006, 22:39
mr.DUDA, а что не так? 

Автор: Exception 8.7.2006, 22:47
Выложи сюда в нормальном виде - больше народу почитает smile
P.S. Не люблю я реестр... Конфиги рулят. 

Автор: mr.DUDA 8.7.2006, 23:36
Цитата(Void @  8.7.2006,  22:39 Найти цитируемый пост)
mr.DUDA, а что не так? 

(оффтоп) у меня пдф в фотошопе по дефолту открывает  smile  

Автор: VisualProgrammerNET 9.7.2006, 00:08
?  smile  

Автор: bc0der 9.7.2006, 00:39
Вот , теперь можно и здесь почитать !!!  smile 

Программироние реестра средствами .NET на языке C# .

Что такое реестр ? 
Реестр действует как центральное хранилище сведений об операционной системе и приложений компьютера. Например, приложения используют реестр для хранения сведений, которые необходимосохранить при закрытии приложения и к которым при перезагрузке приложения необходимо получить доступ. Например, имеется возможность сохранять цветовые настройки, положение или размер окна. Каждый пользователь имеет возможность сохранять эти сведения для себя в определенном месте реестра.
Основные классы для работы с реестром в .NET – Registry и RegistryKey , которые находятся в пространстве имён Microsoft.Win32 .

Registry содержит открытые (статические) поля которые предоставляют доступ к соотв. Ключам реестра :
LocalMachine – Данные о конфигурации для локального компьютера. Это поле считывает базовый ключ реестра HKEY_LOCAL_MACHINE. 

ClassesRoot – Определение типов (или классов) документов и свойств, связанных с этими типами. Это поле считывает базовый ключ реестра Windows HKEY_CLASSES_ROOT.

CurrentConfig – Сведения о конфигурации, относящиеся к оборудованию, которое не имеет прямого отношения к пользователю. Это поле считывает базовый ключ реестра HKEY_CURRENT_CONFIG.

Users – Сведения о стандартной пользовательской конфигурации. Это поле считывает базовый ключ реестра HKEY_USERS.

CurrentUser – Сведения о текущих пользовательских привилегиях. Это поле считывает базовый ключ реестра HKEY_CURRENT_USER.

PerformanceData - Сведения о рабочих характеристиках для программных компонентов. Это поле считывает базовый ключ реестра HKEY_PERFORMANCE_DATA.

DynData - Динамические данные реестра. Это поле считывает базовый ключ реестра HKEY_DYN_DATA. (Windown 9x/ME) .

Теперь рассмотри класс RegistryKey , который является базовой единицей организации в реестре и может быть сравнен с папками в Windows Explorer.

Основные свойства RegistryKey :

Name - Извлечение имени ключа. .
SubKeyCount - Извлечение числа подключей на базовом уровне для текущего ключа.
ValueCount - Извлечение числа значений в ключе.


Методы :

Close - Закрытие ключа и его сброс на диск, если изменено содержание.
CreateSubKey - Создание нового подключа или открытие существующего подключа. Строка subKey не учитывается в регистре.
DeleteSubKey - Перегружен. Удаление заданного подключа. Строка subKey не учитывается в регистре.
DeleteSubKeyTree - Удаление подключа и дочерних подключей рекурсивно. Строка subKey не учитывается в регистре.
DeleteValueПерегружен. Удаление заданного значения из этого ключа.
Flush - Запись всех атрибутов заданного открытого ключа реестра в реестр.
GetSubKeyNames - Извлечение массива строк, который содержит все имена подключей.
GetValue - Перегружен. Извлечение заданного значения.
GetValueNames - Извлечение массива строк, содержащего все имена значений, связанных с этим ключом.
OpenRemoteBaseKey - Открытие нового RegistryKey, который представляет запрошенный ключ на чужом компьютере.
OpenSubKey - Перегружен. Извлечение заданного подключа с доступом для записи.
SetValue - Установка заданного значения.

Ну вот , всё что нужно знать перечислил , теперь можно попробовать что-нибудь записать в реестр и прочитать из него .

Допустим , мы хотим чтобы при выходе из программы сохранялся размер окна (формы) , а при запуске программы , окно становилось таким , какое было перед закрытием .

В деструктор формы пишем код :

Код

protected override void Dispose(bool disposing)
{
            
///////////////////// Вот это добавили //////////////////////////////////////
   try
   {

    RegistryKey key = Registry.CurrentUser.OpenSubKey("Software", true); 
// Открыли папку , true означает - хотим ли мы записывать в этот раздел 
// реестра ?
      RegistryKey wKey = key.CreateSubKey("RegistryTesting"); 
// Создали новую папку в реестре
wKey.SetValue("FormWidth", this.Size.Width);
wKey.SetValue("FormHeight", this.Size.Height);
// Здесь мы создали 2 ключа в которых сохранили размер формы
      // MessageBox.Show("Параметры сохранены .");

    }
    catch(System.Exception err)
    {
MessageBox.Show("Произошла ошибка при сохранении параметров : " + err.Message);
    }

////////////////////////////////////////////////////////////////////////////
    if (disposing && (components != null))
     {
          components.Dispose();
     }
     
base.Dispose(disposing);
}


*Примечание : Если вы пишите свою программу в Visual Studio 2005 , тогда не забудьте добавить в модуль с деструктором (Имя_Формы.Designer.cs) эти директивы :

Код

using Microsoft.Win32;
using System.Windows.Forms;


Ну вот параметры формы сохранились , в этом легко убедиться если запустить regedit и посмотреть раздел HKEY_CURRENT_USER\Software\RegistryTesting .

Теперь сделаем так чтобы форма восстанавливала свои размеры при загрузке .
В событие формы OnLoad пишем такой код :

Код

private void frmMain_Load(object sender, EventArgs e)
{
try
      {

          RegistryKey key = Registry.CurrentUser;
          key = key.OpenSubKey("Software\\RegistryTesting");
          System.Object w = key.GetValue("FormWidth");
          System.Object h = key.GetValue("FormHeight");
          // Получили значения ключей и теперь применяем их к форме
          this.Width = (int)w;
          this.Height = (int)h;
          // MessageBox.Show("Форма восстановлена .");

       }
    catch(System.Exception err)
    {
MessageBox.Show("Произошла ошибка при загрузке параметров "+err.Message);
    }

}


Теперь можно запустить программу и посмотреть как это работает .

Чтобы удалить все параметры из реестра , достаточно удалить папку RegistryTesting вызвав метод DeleteSubKey : 

Код

RegistryKey key = Registry.CurrentUser.OpenSubKey("Software", true);
key.DeleteSubKey("RegistryTesting");


Ну вот и всё, теперь вы можете писать свои программы по работе с реестром , пользуясь основными свойствами и методами классов Registry и RegistryKey . Надеюсь эта статья не оказалась напрасной . 
 

Автор: LastLame 23.7.2006, 03:28
bc0der спасибо за статью. Компактная, и все по делу. Как раз искал информацию по работе с реестром в c#.  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)