Вход/Регистрация
C# для профессионалов. Том II
вернуться

Ватсон Карли

Шрифт:

RegistryKey Hklm = Registry.LocalMachine;

RegistryKey HkSoftware = Hklm.OpenSubKey("Software");

RegistryKey HkMicrosoft = HkSoftware.OpenSubKey("Microsoft", true);

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

Метод

OpenSubKey
будет вызываться, если ожидается, что ключ уже присутствует. Если ключ отсутствует, то он возвращает ссылку null. Если желательно создать ключ, то необходимо использовать метод
CreateSubKey
(который автоматически предоставляет доступ к ключу для чтения-записи через возвращаемую ссылку):

RegistryKey Hklm = Registry.LocalMachine;

RegistryKey HkSoftware = Hklm.OpenSubKey("Software");

RegistryKey HkMine = HkSoftware.CreateSubKey("MyOwnSoftware");

Способ работы

CreateSubKey
достаточно интересен: он будет создавать ключ, если тот еще не существует, а если уже существует, то будет возвращать экземпляр
RegistryKey
, который представляет существующий ключ. Причина такого поведения метода состоит в способе использования реестра. Реестр в целом содержит долговременные данные, например, конфигурационную информацию для Windows и различных приложений. Поэтому не очень часто возникает ситуация, когда необходимо явно создать ключ.

Более распространена ситуация, когда приложению необходимо убедиться, что некоторые данные присутствуют в реестре, другими словами, создать соответствующие ключи, если они еще не существуют, но ничего не делать, если они существуют. Метод

CreateSubKey
прекрасно с этим справляется. В отличие, например, от ситуации с
FileInfo.Open
у
CreateSubKey
нет возможности случайно удалить какие-либо данные. Если целью действительно является удаление ключей реестра, то необходимо явно вызвать метод
RegistryKey.Delete
. Это имеет смысл с учетом важности реестра для Windows. Меньше всего хотелось бы полностью разрушить Windows, удалив пару важных ключей во время отладки обращений к реестру в C#.

Когда ключ реестра для чтения или модификации найден, можно использовать методы

SetValue
или
GetValue
для задания или получения из них данных. Оба эти метода получают в качестве параметра строку, задающую имя значения, a
SetValue
требует дополнительно ссылку на объект, содержащий детали значения. Так как параметр определяется как объектная ссылка, то он может действительности быть ссылкой на любой класс по желанию.
SetValue
будет определять по типу реально предоставленного класса, как задать значение
REG_SZ
,
REG_DWORD
или
REG_BINARY
. Например:

RegistryKey HkMine = HkSoftware.CreateSubKey("MyOwnSoftware");

HkMine.SetValue("MyStringValue", "Hello World");

HkMine.SetValue(MyIntValue", 20);

Этот код задает для ключа два значения:

MyStringValue
будет иметь тип
REG_SZ
, а
MyIntValue
— тип
REG_DWORD
. В последующем примере будут рассмотрены только эти два типа.

RegistryKey.GetValue
работает по большей части таким же образом. Он определен для возврата объектной ссылки, а значит, он может на самом деле вернуть ссылку на
string
, если обнаружит значение типа
REG_SZ
, и
int
, если это значение имеет тип
REG_DWORD
:

string StringValue = (string)HkMine.GetValue("MyStringValue");

int IntValue = (int)HkMine.Get.Value("MyIntValue");

И наконец, по окончании чтения или модификации данных ключ необходимо закрыть:

HkMine.Close;

Помимо этих методов,

RegistryKey
реализует большое число других методов и свойств. Таблицы представляют выборку наиболее употребительных:

Свойства

Имя свойства Назначение
Name
Имя ключа (только для чтения)
SubKeyCount
Число потомков этого ключа
ValueCount
Сколько значений содержит ключ

Методы

Имя Назначение
Close
Закрывает ключ
CreateSubKey
Создает подключ с заданным именем (или открывает его, если он уже существует)
DeleteSubKey
Удаляет заданный подключ
DeleteSubKeyTree
Рекурсивно удаляет подключ и всех его потомков
DeleteValue
Удаляет именованное значение из ключа
GetSubKeyNames
Возвращает массив строк, содержащих имена подключей
GetValue
Возвращает именованное значение
GetValueNames
Возвраает массив строк, содержащих имена всех значений ключа
OpenSubKey
Возвращает ссылку на экземпляр
RegistryKey
, который представляет заданный подключ
SetValue
Задает именованное значение

Пример: SelfPlacingWindow

Проиллюстрируем использование классов реестра с помощью приложения, которое называется

SelfPlacingWindow
. Этот пример является простым приложением Windows на C#, которое в действительности почти не имеет свойств. Единственное, что можно сделать в этом приложении, это щелкнуть по кнопке, что приведет к появлению стандартного диалогового окна выбора цветов в Window (представляемому классом
System.Windows.Forms.ColorDialog
), чтобы можно было выбрать цвет который станет фоновым цветом формы

  • Читать дальше
  • 1
  • ...
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: