Чтение онлайн

на главную - закладки

Жанры

C# для профессионалов. Том II

Ватсон Карли

Шрифт:

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

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
), чтобы можно было выбрать цвет который станет фоновым цветом формы

Это приложение обладает одним важным свойством, отсутствующим практически у всех остальных приложений разрабатываемых в этой книге. Если перетащить окно по экрану, изменить его размер, развернуть на весь экран или свернуть его перед выходом из приложения, оно будет запоминать новое положение, а также цвет фона, чтобы в следующий раз при запуске автоматически восстанавливалось последнее выбранное состояние. Оно запоминает эту информацию, так как записывает ее в реестр, когда закрывается. Таким образом, будут продемонстрированы не только сами классы реестра из .NET, но также типичное их использование, которое наверняка захочется скопировать в любое серьезное разрабатываемое коммерческое приложение Window.

Местом, где

SelfPlacingWindow
хранил свою информацию в реестре, является ключ
HKLM/Software/WroxPress/SelfPlacingWindow
. HKLM является обычным местом для хранения информации о конфигурации приложений, но отметим, что оно не является специфическим для пользователя. Вероятно, вам понадобится скопировать эту информацию в улей HK_Users, чтобы каждый пользователь имел свой собственный профиль.

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

Если теперь изменить цвет фона и переместить или изменить размер окна приложения

SelfPlacingWindow
, оно создаст перед завершением ключ
HKLM/Software/WroxPress/SelfPlacingWindow
и запишет в него свою новую конфигурационную информацию. Можно проверить эту информацию с помощью
regedit
:

На этом экране можно видеть, что

SelfPlacingWindow
помещает ряд значений в ключ реестра. 

Значения

Red
,
Green
и
Blue
задают компоненты цветов, которые формируют выбранный цвет фона. О компонентах цвета подробно рассказывается в главе 21. Любой изображаемый цвет в системе может быть полностью описан этими тремя компонентами, каждый из которых представляется числом между 0 и 255 (или
0x00
и
0xff
в шестнадцатеричном представлении). Указанные здесь значения задают ярко-зеленый цвет. Существуют также четыре дополнительных значения
REG_DWORD
, которые представляют положение и размер окна:
X
и
Y
являются координатами верхнего левого угла окна на рабочем столе.
Width
и
Height
задают размер окна
WindowsState
является единственным значением, для которого мы использовали строковый тип данных (
REG_SZ
), и оно может содержать одну из строк
normal
,
maximized
или
minimized
, в зависимости от конечного состояния окна при выходе из приложения.

Если теперь запустить

SelfPlacingWindow
снова, то оно будет считывать этот ключ реестра и автоматически позиционировать себя соответственно:

В этот раз, когда происходит выход из

SelfPlacingWindow
, приложение будет перезаписывать предыдущие настройки в реестре новыми значениями, существующими во время выхода из приложения. Чтобы создать код примера, мы создаем проект Windows Forms в Visual Studio.NET и добавляем окно списка и кнопку, используя набор инструментов среды разработчика. Мы изменим имена этих элементов управления соответственно на
listBoxMessages
и
buttonChooseColor
. Также необходимо обеспечить использование пространства имен
Microsoft.Win32
.

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

Барон Дубов 4

Карелин Сергей Витальевич
4. Его Дубейшество
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Барон Дубов 4

Идеальный мир для Лекаря 16

Сапфир Олег
16. Лекарь
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 16

На границе империй. Том 10. Часть 4

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 4

Инквизитор Тьмы

Шмаков Алексей Семенович
1. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы

Столкновение

Хабра Бал
1. Вне льда
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Столкновение

Возвышение Меркурия. Книга 5

Кронос Александр
5. Меркурий
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 5

Боги, пиво и дурак. Том 4

Горина Юлия Николаевна
4. Боги, пиво и дурак
Фантастика:
фэнтези
героическая фантастика
попаданцы
5.00
рейтинг книги
Боги, пиво и дурак. Том 4

Камень Книга одиннадцатая

Минин Станислав
11. Камень
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Камень Книга одиннадцатая

Поющие в терновнике

Маккалоу Колин
Любовные романы:
современные любовные романы
9.56
рейтинг книги
Поющие в терновнике

Новый Рал 2

Северный Лис
2. Рал!
Фантастика:
фэнтези
7.62
рейтинг книги
Новый Рал 2

Дочь моего друга

Тоцка Тала
2. Айдаровы
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Дочь моего друга

Гридень 2. Поиск пути

Гуров Валерий Александрович
2. Гридень
Детективы:
исторические детективы
5.00
рейтинг книги
Гридень 2. Поиск пути

Кодекс Крови. Книга IХ

Борзых М.
9. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга IХ

Вернуть невесту. Ловушка для попаданки 2

Ардова Алиса
2. Вернуть невесту
Любовные романы:
любовно-фантастические романы
7.88
рейтинг книги
Вернуть невесту. Ловушка для попаданки 2