Выбрать главу

Но не только раздел shell может хранить настройки контекстного меню файлов с соответствующим расширением — команды контекстного меню могут содержаться и в разделе shellex. Нет, это не избыточность — раздел shellex имеет совершенно не такое назначение, как shell. Если раздел shell создан специально для того, чтобы описывать команды меню, вызывающие различные программы с помощью стандартного диалога Запуск программы, то shellex хранит сведения о дополнительных расширениях, которые могут использоваться при отображении значка, контекстного меню или диалога свойств для файлов данного расширения. Эти расширения реализованы в системе с помощью ActiveX-объектов, но о них мы скажем чуть позже, когда будет рассматриваться ветвь реестра, содержащая сведения обо всех установленных на компьютере ActiveX-объектах.

В зависимости от назначения ActiveX-объекта его описание должно находиться в одном из дочерних подразделов раздела shellex. Например, в подразделе PropertySheetHandlers хранятся дополнительные вкладки для диалога Свойства файлов данного расширения. В подразделе ContextMenuHandlers определяются дополнительные команды контекстного меню, использующие для своей работы ActiveX-объекты. В подразделе DropHandler определяется обработчик для операций drag-and-drop, выполняемых с файлами соответствующего расширения, а в подразделе IconHandler находятся сведения об обработчиках значков, которые будут выводить соответствующий значок в диалоге свойств или вместо стандартного значка файла.

Независимо от того, какой подраздел используется для описания расширения ActiveX-файла, его содержимое должно быть представлено в одной из следующих форм.

■ С помощью набора подразделов, названных в честь соответствующих CLSID-номеров ActiveX-объектов (один подраздел — описание одного расширения).

■ С использованием подразделов, название которых не имеет значения. В этом случае параметры (По умолчанию) данных подразделов должны хранить значения, названные в честь соответствующих CLSID-номеров ActiveX-объектов (один подраздел — описание одного расширения).

Подразделы корневого раздела

Как видите, сведения о расширениях файлов хранятся в реестре в виде упорядоченных данных (чего, к сожалению, нельзя сказать о других корневых разделах реестра, структура которых если и прослеживается, то только в некоторых местах).

Но не только сведения о расширениях файлов можно найти в корневом разделе HKEY_CLASSES_ROOT — в нем также хранятся сведения обо всех установленных на компьютере ActiveX-объектах и некоторые другие разделы, описание которых приведено далее.

CLSID

В данной главе книги уже несколько раз упоминалось о таких объектах Windows, как ActiveX, но еще ни слова не говорилось о том, что же это такое и для чего необходимо. Но этот пробел будет восполнен, ведь сейчас начнется рассказ о структуре раздела CLSID, который включает в себя сведения об ActiveX-объектах.

ActiveX-объекты — это специальные, уже скомпилированные программы, доступ к которым нельзя получить напрямую, но их можно вызвать с помощью операционной системы Windows. Всем известными примерами ActiveX-объектов могут быть следующие значки: Мой компьютер, Мои документы, Корзина, Назначенные задания, Панель управления и т.д.

Каждый ActiveX-объект имеет свой уникальный идентификатор — CLSID-номер, который служит в системе в качестве названия ActiveX-объекта. CLSID-номера не берутся из головы — для их создания предназначены специальные программы. Например, программа GUIDgen, входящая в стандартную поставку компилятора Microsoft Visual C++ 6.0.

CLSID-номер является 32-байтным номером, состоящим из шестнадцатиричных чисел, первые восемь байт которого генерируются случайным образом. Следующие четыре байта используют для своего создания текущее значение даты и времени, а остальные генерируются на основе конфигурационных данных компьютера. При этом CLSID-номер берется в фигурные кавычки и имеет такой формат написания: {ХХХХХХХХХ-ХХХХ-ХХХХ-ХХХХ-ХХХХХХХХХХХХ}.

Перечень CLSID-номеров наиболее интересных ActiveX-объектов можно просмотреть в приложении 4.

Параметры раздела ActiveX-объекта

Раздел CLSID включает в себя список вложенных подразделов, каждый из которых назван на основе CLSID-номера ActiveX-объекта, который он описывает, и хранит сведения только об этом ActiveX-объекте. Подраздел ActiveX-объекта может содержать следующие параметры.

■ (По умолчанию) — определяет дружественное название ActiveX-объекта, предназначенное для отображения в качестве имени значка или команды. Например, если изменить значение параметра (По умолчанию) для ActiveX-объекта {645FF040-5081-101B-9F08-00AA002F954E} (значок Корзины), то изменится и само название Корзины, отображаемое под ее значком. Если изменить значение параметра (По умолчанию) ActiveX-объекта {21EC2020-3AEA-1069-A2DD-08002B30309D}, то изменится заголовок и адрес панели управления при ее отображении (рис. 4.5).