Реестр Windows XP
Глава 4Корневой раздел HKEY_CLASSES_ROOT
В данной главе будет рассмотрен корневой раздел реестра HKEY_CLASSES_ROOT. Начнем с общих сведений о реестре.
Реестр Windows — это большая база данных, хранящая сведения обо всех настройках операционной системы. Будь то настройка цвета окна или пароль пользователя для входа в систему — все, вплоть до самого маленького флажка самого маленького диалогового окна, находится в реестре Windows.
Так уж получилось, что в Windows XP реестр реализован в виде набора файлов, доступ к которым можно получить только программным путем. Здесь не будет описываться содержимое этих файлов — это не является главной темой книги. Не будет описана и работа с программами для доступа к реестру — данная часть предназначена для тех, кто уже имеет некоторый опыт в использовании реестра. Но, несмотря на это, хотелось бы привести некоторую информацию для тех, кто уже забыл, как работать с реестром (но имеет опыт работы с ним — иначе стоит купить отдельную книгу, посвященную именно этой теме).
Для доступа к реестру в Windows XP применяется стандартная программа операционной системы regedit.exe, расположенная в каталоге %systemroot%. После ее запуска перед вами отобразится окно, состоящее из двух областей — в левой области отображаются ветви реестра, а в правой — содержащиеся в них параметры и их значения. Ветви реестра не произрастают из ничего, они имеют определенную точку монтирования — папку Мой компьютер. При этом стоит сказать, что от точки монтирования отходит пять ветвей (ни больше, ни меньше), называемых корневыми разделами и делящих содержащуюся в реестре информацию на определенные категории. Кратко опишем эти корневые разделы.
■ HKEY_CLASSES_ROOT — содержит сведения обо всех расширениях файлов и ActiveX-объектах, зарегистрированных в системе. Глава 4 посвящена содержимому этого раздела.
■ HKEY_CURRENT_USER — здесь находятся сведения о параметрах настройки оболочки Windows и конкретных установленных в ней программ для пользователя, работающего в данный момент с компьютером.
■ HKEY_USERS — сведения для построения предыдущего раздела хранятся именно в этом корневом разделе. Раздел HKEY_USERS содержит данные о настройках оболочки Windows, применяемых для пользователя, впервые вошедшего в систему (в разделе . DEFAULT данного корневого раздела), а также настройки определенных классов пользователей и текущих пользователей системы. Другими словами, если в Windows 9x данный корневой раздел хранил сведения о настройках всех пользователей системы, то в Windows XP он хранит настройки только текущих пользователей, зарегистрированных в системе. Но если войти в программу regedit.exe от имени другого пользователя, то данный корневой раздел будет содержать настройки как пользователя, который сейчас зарегистрирован в системе, так и пользователя, от чьего имени был произведен запуск программы.
■ HKEY_LOCAL_MACHINE — если предыдущие два корневых раздела включалив себя сведения о настройках определенных пользователей, то данный корневой раздел содержит информацию о настройках системы и программ, применяемых для всех пользователей системы.
■ HKEY_CURRENT_CONFIG — корневой раздел включает в себя копию содержимого ветви реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware Profiles\Current и создается для совместимости с предыдущими версиями операционной системы.
Как уже было сказано, правая панель редактора реестра хранит сведения о содержащихся в открытой на данный момент ветви реестра параметрах: их названия, тип и значение. Параметры реестра могут иметь следующие типы данных (имеется в виду, что редактор реестра может создавать эти типы параметров, на самом же деле типов параметров намного больше).
■ REG_SZ — строковый параметр, содержимым которого может быть строка символов Unicode.
■ REG_EXPAND_SZ — расширяемый строковый параметр. Его содержимым может быть как произвольный текст, так и определенные переменные, которые после обработки системой преобразуются в статические пути к каталогам Windows (например, переменная %systemroot% преобразуется в каталог, в котором установлена текущая версия Windows, а переменная %username% преобразуется в имя текущего пользователя, работающего в системе).
■ REG_MULTI_SZ — мультистроковый параметр, содержимым которого могут быть несколько строк текста, разграниченных NULL.
■ REG_DWORD — если все предыдущие типы параметров хранили строковые данные, то данный тип определяет числовое значение длиной не более 4 байт.
■ REG_BINARY — этот параметр хранит данные любой длины, но в основном применяется длина в 4 байта (по аналогии с REG_DWORD).
ПРИМЕЧАНИЕ
В основном нет никакой разницы между типами параметров реестра, поэтому вместо REG_DWORD-типа можно создавать параметры REG_BINARY-типа, вместо REG_SZ-типа можно создавать параметры REG_EXPAND_SZ-типа и т.д.
Битовая маска — это название, используемое для описания значения параметров типа REG_DWORD и REG_BINARY, при котором отдельно описывается результат установки каждого бита данного параметра. Например, в этой книге можно встретить абзацы, в которых будет содержаться подобный текст:
0х00000001 — описание1
0х00000002 — описание2
0x00000004 — описание3
0x00000008 — описание4
0x00000010 — описание5
0x00000020 — описание6
…
Приведенный абзац можно расшифровать так: если первый бит параметра будет установлен, то описание1, если второй бит параметра установлен, то описание2, если третий бит параметра установлен — описание3 и т.д.
При этом следует еще сказать, что в параметре может быть установлено сразу несколько битов, в этом случае выполняемое им действие определяется суммой соответствующих описаний. Битовая маска не только упрощает описание сложных параметров (по аналогии со способом их описания эти параметры будут также называться битовыми масками), но и позволяет легко установить отдельные биты параметра. Например, чтобы установить все приведенные выше биты параметра, нужно записать в него значение, равное 1 + 2 + 4 + 8 + 10 + 20 = 7 + 38 = 3F (расчет ведется в шестнадцатиричной системе счисления).
Рассмотрим наиболее интересные параметры реестра. Первым корневым разделом, структура которого будет описана, станет раздел HKEY_CLASSES_ROOT. Хотя, если быть точным, содержимое этого раздела строится на основе двух ветвей других корневых разделов: HKEY_LOCAL_MACHINE\SOFTWARE\Classes и HKEY_CURRENT_USER\Software\Classes. Первая ветвь реестра включает в себя информацию о расширениях файлов, используемую всеми пользователями компьютера для построения карты расширений. Вторая ветвь содержит информацию о расширениях, которые либо используются только текущим пользователем, либо переопределяют собой информацию из ветви корневого раздела HKEY_LOCAL_ MACHINE. Иначе говоря, если информация о каком-нибудь расширении содержится как в корневом разделе HKEY_LOCAL_MACHINE, так и в HKEY_CURRENT_USER, то сведения из этих ветвей будут объединяться. При этом сведения из ветви HKEY_CURRENT_USER будут заменять собой сведения из ветви HKEY_LOCAL_MACHINE.
Корневой раздел HKEY_CLASSES_ROOT имеет более-менее статичную структуру. Если остальные корневые разделы могут хранить любую информацию, какую только захотят поместить в них программисты (любое название параметра и любой путь, ведущий к этому параметру), то HKEY_CLASSES_ROOT содержит параметры, названия которых не зависят от прихотей программистов, разрабатывающих соответствующее расширение файла или ActiveX-объект.
Как уже говорилось выше, корневой раздел HKEY_CLASSES_ROOT включает в себя всю информацию о расширениях файлов, которые зарегистрированы в вашей системе, а также описывает те действия, которые вы можете выполнить с файлами данного расширения (команды контекстного меню). Ветвь также содержит сведения обо всех зарегистрированных в системе ActiveX-компонентах, но о них будет рассказано чуть позже, а сейчас разберемся с хранением сведений о расширениях файлов.
Расширения файлов
Есть два способа хранения в реестре информации о расширении файлов — правильный и не очень. Второй применялся в старых версиях операционной системы Windows, хотя поддерживается и Windows XP. При его использовании все параметры и дочерние подразделы записываются в один раздел HKEY_CLASSES_ROOT. Таким образом, все то, что будет рассмотрено далее в этом разделе, при использовании неправильного способа хранения будет содержаться в одном подразделе корневого раздела HKEY_CLASSES_ROOT. Правильный же способ хранения параметров расширения файла определяет для их хранения два раздела. Первый из них назван в честь расширения файла, например, для файлов с расширением TXT он будет называться .txt. Этот раздел еще называют разделом расширения. Он практически ничего интересного не содержит, но зато в параметре (По умолчанию) находится название второго раздела. Вот этот раздел реестра как раз и включает в себя всю интересную и увлекательную информацию о расширении. Он еще называется разделом идентификатора.
Рис. 4.1. Разделы описания расширения файла
В книге будут описываться параметры и дочерние разделы, используемые в регистрации расширения с помощью правильного способа. Но сначала посмотрите на рис. 4.1. Он иллюстрирует правильный способ хранения информации для файлов с расширением TXT.
Раздел расширения
Как уже говорилось, раздел расширения включает в себя параметр (По умолчанию), значение которого определяет название раздела идентификатора, описывающего данное расширение. Но, кроме этого параметра, раздел расширения может содержать еще несколько параметров строкового типа.
■ Content Type — определяет тип расширения MIME, который ассоциирован с файлами соответствующего расширения. Те, кто занимался веб-программированием, конечно знают, что такое MIME. Именно строка MIME используется браузером для определения того, что же ему нужно делать с соответствующим расширением (то ли открыть, то ли воспроизвести, то ли еще что-нибудь).
На рис. 4.1 видно, что текстовые файлы (TXT) используют расширение text/plain, которое определяет содержимое данных файлов как неформатированный текст.
■ PerceivedType — говорит системе о том, в каком виде хранится информация с соответствующим расширением. Этот параметр может принимать такие значения: Text, Image, Audio, Video, System, Compressed.
■ Generic — если значение равно System, то файлы с соответствующим расширением являются собственностью системы и сведения о них лучше не удалять.
■ NoOpen — применяется только в том случае, когда параметр (По умолчанию) раздела расширения не имеет никакого значения. Если данный параметр присутствует, то при попытке открытия соответствующего файла перед отображением диалога Открыть с помощью будет выводиться диалог Внимание, с сообщением о том, что файлы с данным расширением используются системой и их лучше не открывать.
Данный раздел может содержать подразделы. Например, в нем может храниться подраздел ShellNew, который определяет команды в списке Создать контекстного меню Рабочего стола или Проводника. Иначе говоря, если раздел расширения включает в себя этот подраздел (при этом в нем должен находиться один из описанных ниже параметров), то в списке Создать появится пункт, с помощью которого можно будет создать файл с соответствующим расширением.
Как сказано выше, подраздел ShellNew должен содержать определенный параметр. Этот параметр как раз и определяет, что именно система должна сделать после того, как пользователь выбрал соответствующую команду меню Создать. Рассмотрим возможные параметры (в подразделе ShellNew должен находиться только один из этих параметров).
■ Command — этот параметр строкового типа определяет команду, которая будет выполняться при выборе соответствующего пункта меню Создать.
■ NullFile — данный строковый параметр вообще не должен содержать никакого значения (при этом после выбора создания соответствующего расширения будет создаваться пустой файл).
■ FileName — этот параметр строкового типа определяет путь и имя файла, который будет создаваться (просто копироваться в текущую папку) после выбора соответствующей команды меню Создать. При этом если файл находится в каталоге, определяемом содержимым параметра строкового типа Templates, расположенного в ветви реестра HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ShellFolders, то достаточно присвоить параметру FileName только имя необходимого файла.
■ Data — параметр BINARY-типа представляет собой последовательность цифр в шестнадцатиричной системе счисления, которую система будет применять для генерации содержимого файла (например, этот параметр используют файлы с музыкальным контекстом для возможности создания пустого файла-образца звука).
Для примера попробуем создать свою собственную команду в списке Создать. Поскольку большая часть книги посвящена описанию работы с сервером сценариев Windows, сначала будет описан шаблон для быстрого создания основы файла сценария VBS. Для этого нужно воспользоваться ветвью реестра HKEY_CLASSES_ROOT\.vbs\ShellNew. Необходимо создать в ней расширяемый строковый параметр FileName, которому нужно присвоить путь к файлу шаблона. Поскольку в шаблоне будут строки вызова объектов Windows, другие параметры данной ветви не подойдут. Например, присвойте данному параметру значение %systemroot%\WSHtemplate.vbs. Файл шаблона должен содержать следующие данные:
set wshshell = WScript.CreateObject("WScript.Shell")
Пока хватит и этого вызова, когда вы займетесь непосредственно созданиями сценариев, то модифицируете файл шаблона. Теперь присвойте созданному файлу имя WSHtemplate.vbs и посмотрите на результат (рис. 4.2).
Рис. 4.2. Результат создания команды контекстного меню
Раздел идентификатора
Теперь поговорим о содержимом второго раздела, используемого для описания расширения.
Кроме разделов идентификаторов для расширений файлов, в системе также существуют стандартные идентификаторы Windows, описывающие такие объекты, как папка, диск, неизвестные расширения.
■ Folder — содержит настройки для папок Windows. Команды контекстного меню, описываемые данным идентификатором, могут использоваться в построении контекстного меню таких объектов, как диски, директории, значки Корзина и Мой компьютер.
■ Directory — определяет настройки контекстного меню для директорий Windows и содержит подраздел Background. Содержимое этого подраздела определяет команды Упорядочить значки и Создать для контекстного меню Рабочего стола и Проводника.
■ Drive — содержит настройки значков дисков в системе. При этом системой могут применяться и дополнительные идентификаторы для отображения дисков, например, если в данный момент в привод компакт-дисков вставлен музыкальный диск, то будет использоваться идентификатор AudioCD.
■ CompressedFolder — определяет настройки сжатых папок.
■ * — если все предыдущие идентификаторы описывали настройки конкретных файлов расширений, то данный идентификатор определяет настройки для всех расширений файлов, зарегистрированных в системе. Именно сюда довольно часто добавляют свои команды контекстного меню различные программы. Например, идентификатор используется программами WinRAR и «Антивирус Касперского» для добавления своих команд в контекстное меню файлов.
■ Unknown — определяет настройки для всех файлов, не зарегистрированных в системе. Обычно он описывает только команду Открыть с помощью.
■ AllFilesystemObjects — является родительским для всех других идентификаторов. Он определяет настройки для всего: для зарегистрированных файлов, для незарегистрированных файлов, для папок, дисков и т.д. По умолчанию данный идентификатор определяет только команду Отправить.
Параметры раздела идентификатора
Раздел идентификатора может содержать следующие параметры.
■ EditFlags — данный параметр DWORD-типа определяет различные ограничения на модификацию параметров данного расширения при помощи вкладки Типы файлов диалога Свойства папки. Например, если значение равно 0х00000001, то соответствующего расширения в списке зарегистрированных файлов данной вкладки вы не найдете. Если же значение равно 0х00000008, то кнопка Дополнительно вкладки Типы файлов для данного расширения будет заблокирована. Если же значение равно 0х00000200, то будет запрещена возможность смены значка для данного расширения.
Можно вообще сложить все предыдущие значения — параметр является набором управляющих битов (битовой маской) — это приведет к одновременному скрытию типа файлов из диалога Свойства папки, блокировке кнопки Дополнительно для данного расширения и запрету изменения значка.
Рис. 4.3. Запрет на удаление, изменение, смену описания и смену значка
Для примера на рис. 4.3 приведен диалог изменения ТХТ-файла с установленным значением параметра в 0x000003c0, то есть используются следующие битовые маски:
• 0х00000040 — делает недоступной кнопку Изменить диалога Изменение свойств типа файлов (диалог вызывается при нажатии кнопки Дополнительно на вкладке Типы файлов);
• 0х00000080 — делает недоступной кнопку Удалить диалога Изменение свойств типа файлов;
• 0х00000100— запрещает пользователю изменение описания файлов с данным расширением при помощи поля диалога Изменение свойств типа файлов;
• 0х00000200 — запрещает пользователю изменение пиктограммы, присвоенной файлам с данным расширением, при помощи кнопки Сменить значок в окне Изменение свойств типа файлов.
■ AlwaysShowExt и NeverShowExt — два эти параметра строкового типа являются взаимоисключающими, то есть если в разделе присутствует один из них, то другого там быть не должно (значения им присваивать не нужно). Если в разделе будет присутствовать первый параметр, то соответствующее расширение файла всегда будет отображаться. Независимо от того, как настроена система (здесь имеется в виду возможность скрытия зарегистрированных расширений при помощи соответствующего флажка вкладки Вид диалога Свойства папки). Если присутствует второй параметр, то расширение всегда будет скрыто.
■ InfoTip — этот параметр строкового типа определяет подсказку, которая будет отображаться при удержании указателя мыши над файлом данного расширения. Параметр может содержать или произвольный текст, или специальные зарезервированные слова (если присутствуют обычные слова, то зарезервированные также считаются обычными и не выполняют заложенные в них действия). Зарезервированные слова пишутся после строки prop:. К таким словам относятся следующие.
• Comment — в подсказке будет выводиться комментарий, вводимый в диалоге Свойства данного файла.
• Size — отображается размер файла.
• Access — отображаются права на доступ к файлу.
• Owner — отображается логин создателя файла.
• Year и другие. Несколько зарезервированных слов пишутся через точку с запятой.
На рис. 4.1 можно увидеть, что для ТХТ-файлов в подсказке отображаются сведения о размере, а также описание файла, задаваемое в параметре (По умол-чанию) раздела идентификатора.
Параметр (По умолчанию) раздела идентификатора содержит строку описания, отображаемую в поле Тип файла диалога Свойства. Значение данного параметра также отображается как название команды в пункте меню Создать контекстного меню Рабочего стола или Проводника.
■ IsShortCut — это необязательный параметр строкового типа, не содержащий никакого значения. Если он присутствует в разделе, то файлы с соответствующим расширением будут считаться ярлыками. Это приведет к тому, что внизу значка файла будет появляться стрелка, символизирующая файл ярлыка.
■ BrowseInPlace — очень интересный строковый параметр, значение которого можно не указывать. Он используется только для идентификаторов, файлы которых открывают окно Проводника — например, для идентификатора Directory. Если данный идентификатор будет содержать параметр строкового типа BrowseInPlace, то все папки в системе будут открываться с помощью браузера Internet Explorer. Например, если попытаться открыть папку С:\Windows, то браузер будет искать сайт с адресом C:\Windows. Конечно, у него это не получится, поэтому с помощью данного параметра строкового типа можно запретить пользователям доступ к папкам системы.
■ DocObject — этот параметр строкового типа также очень интересен, ведь если его создать, допустим, в разделе Directory, то можно добиться таких же действий, что и с помощью предыдущего параметра.
■ Thumbnail — еще один параметр строкового типа. Его значение указывает на файл изображения, который будет использоваться для отображения в виде эскиза страницы для файлов с соответствующим расширением (правда, данный параметр применяется не для всех идентификаторов). Например, если создать данный параметр в разделе идентификатора Drive, то все диски при использовании вида Эскизы страниц будут представлены с помощью указанного вами изображения. Если же создать данный параметр в разделе идентификатора Folder, то ваш значок будет использоваться для отображения значка Корзины.
■ DefaultDropEffect — данный параметр DWORD-типа определяет, какую именно операцию будет выполнять система при перемещении в другое окно файлов с данным расширением. По умолчанию при этом она перемещает файл любого расширения в соответствующую папку, но если значение этого параметра равно 1, то файл с соответствующим расширением будет копироваться.
Разделы ветви идентификатора
Раздел идентификатора, кроме параметров, может включать в себя и другие разделы — они определяют значок, используемый для файлов с данным расширением, текущую версию идентификатора, а также сами команды контекстного меню файла. Рассмотрим содержимое этих разделов.
■ CurVer — параметр (По умолчанию) данного раздела определяет названия идентификатора, имеющего более новые сведения о расширении. Если вы встретите этот раздел в каком-нибудь идентификаторе расширения, то можете сразу смотреть на его параметр (По умолчанию) и искать записанный в нем идентификатор — ведь настройки текущего идентификатора в системе уже не применяются.
■ DefaultIcon — параметр (По умолчанию) этого раздела определяет путь к BMP-файлу изображения, применяемому для отображения значков файлов с соответствующим расширением.
■ Shell — это, наверное, самый интересный раздел идентификатора, ведь именно его содержимое и определяет команды контекстного меню для расширения, а также их свойства. Параметр (По умолчанию) данного раздела определяет название глагола (глаголы являются подразделами раздела shell), команда которого будет использоваться при выполнении попытки открытия файлов соответствующего расширения двойным щелчком кнопкой мыши. Параметр (По умолчанию) может также хранить перечисление всех глаголов раздела — в этом случае он описывает последовательность, в которой они будут расположены в контекстном меню файла.
Сами же глаголы, как уже было сказано, являются подразделами ветви shell и могут содержать различные параметры (один глагол определяет одну команду контекстного меню). Параметр (По умолчанию) глагола определяет название команды, которая будет идентифицировать соответствующее действие в контекстном меню файлов. Если данный параметр не будет определен, то в качестве названия команды будет использоваться название подраздела глагола.
Данное правило не распространяется на так называемые стандартные глаголы системы — если их параметр (По умолчанию) не определен, то будет использоваться название команды контекстного меню, заложенное в системе для данных глаголов. К стандартным можно отнести следующие глаголы:
■ Open — добавляет в контекстное меню команду Открыть;
■ Explore — Проводник;
■ Find— Найти;
■ Openas — Открыть с помощью;
■ Runas — Запуск от имени;
■ Print — Печать;
■ Printo — в отличие от предыдущих этот глагол не создает команды контекстного меню, зато он добавляет возможность перетаскивания файлов на значок принтера.
Глаголы могут содержать следующие параметры.
■ MUIVerb — если этот параметр строкового типа присутствует в системе, то его значение будет переопределять значение параметра (По умолчанию) данного глагола.
■ FriendlyAppName — еще один параметр строкового типа. Он переопределяет команду, отображаемую в списке Открыть с помощью и идентифицирующую программу, запускаемую с помощью данного глагола. Например, если создать этот параметр в ветви реестра HKEY_CLASSES_ROOT\txtfile\shell\open и присвоить ему значение, допустим, Мой блокнотик, то можно будет увидеть диалог, представленный на рис. 4.4.
Рис. 4.4. Создание синонима программы
■ BrowserFlags — этот параметр иногда можно встретить в ветви реестра HKEY_CLASSES_ROOT\Folder\shell\open. Он является битовой маской и может определять способ открытия папки и всех ее дочерних объектов в Windows. Например, если в значении этого параметра присутствует битовая маска 0x00000020, то папки будут открываться с помощью Проводника, то есть с открытой панелью папок в левой части окна.
■ Extended — если данный параметр строкового типа существует в подразделе глагола, то описываемая этим подразделом команда не будет отображаться в контекстном меню файлов соответствующего расширения.
Кроме параметров, подразделы глаголов включают в себя и несколько подразделов, которые как раз и определяют команды, выполняемые при выборе из контекстного меню файла соответствующего действия.
■ Command — параметр (По умолчанию) данного подраздела содержит команду, которая будет выполняться при выборе из контекстного меню файла соответствующего действия.
ПРИМЕЧАНИЕ
В реестре Windows XP существует ветвь, переопределяющая программу, которая будет запускаться при двойном щелчке кнопкой мыши на файле (то есть переопределяющая параметр (По умолчанию) подраздела command для глагола open). Этой ветвью является HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\«расширение». Она может хранить строковый параметр Application, который как раз и определяет приложение, запускаемое при двойном щелчке на файле с соответствующим расширением.
■ Ddeexec — подраздел необязателен. Его содержимое определяет команду DDE, которая будет исполняться вместе с указанной командой подраздела command при выборе из контекстного меню соответствующего действия. Само сообщение DDE описано в параметре (По умолчанию) данного подраздела, а параметры для его исполнения записаны в дочерних подразделах. Более подробно об этих параметрах можно узнать из базы данных, поставляемой с книгой (в самой книге эти параметры рассмотрены не будут, так как на практике обычные пользователи их применяют не часто).
ПРИМЕЧАНИЕ
DDE (динамический обмен данными) — это специальные команды, которые позволяют нескольким работающим приложениям обмениваться между собой данными. Например, с помощью DDE можно из одного приложения управлять работой другого.
Но не только раздел 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).
ПРИМЕЧАНИЕ
Если вам необходимо изменить имя сетевого клиента (по умолчанию это имя — Microsoft Windows Network, но можно изменить его на любое другое, например Моя сеть), которое можно найти по пути Сетевое окружение►Вся сеть, то ActiveX-объект сетевого клиента не поможет. Данное имя считывается из параметра строкового типа Name ветви реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanworkstation\NetworkProvider — именно этот параметр и нужно изменять.
Рис. 4.5. Результат изменения названия Панели управления
■ LocalizedString — используется в Windows для локализации операционной системы и содержит название ActiveX-объекта, заменяющее собой название из параметра (По умолчанию).
■ SortOrderIndex — этот параметр DWORD-типа может присутствовать в некоторых подразделах ActiveX-объектов, отображаемых на Рабочем столе, например в подразделах ActiveX-объектов Мой компьютер, Мои документы и Корзина. Он определяет порядок расположения этих ActiveX-объектов на Рабочем столе.
■ InfoTip — данный параметр строкового типа определяет строку подсказки, отображаемую для значка соответствующего ActiveX-объекта при наведении и удержании на нем указателя мыши.
Подразделы ветви ActiveX-объекта
Подразделы, описывающие ActiveX-объекты, кроме параметров, могут содержать множество дочерних подразделов. Среди них могут присутствовать и уже рассмотренные shell и shellex, а также некоторые из следующих подразделов.
■ DefaultIcon — параметр (По умолчанию) данного подраздела определяет путь к файлу рисунка, применяемому для отображения значка ActiveX-объекта (например, этот параметр ActiveX-объекта {20D04FE0-3AEA-1069-A2D8-08002B30309D} определяет значок для папки Мой компьютер).
■ Данный подраздел может также хранить параметр строкового типа OpenIcon, который определяет путь к файлу рисунка, используемому вместо стандартного рисунка значка открытого ActiveX-объекта. На рис. 4.6 можно увидеть результат изменения этого параметра для приведенного выше ActiveX-объекта {20D04FE0-3AEA-1069-A2D8-08002B30309D}.
Рис. 4.6. Изменение значка на панели заголовка папки Мой компьютер
ПРИМЕЧАНИЕ
Значение приведенного выше параметра (а также некоторых других параметров, которые будут описаны) может быть переопределено в ветви реестра HKEY_CURRENT_ USER\Software\Microsoft\Windows\CurrentVersion\Explorer\CLSID\{CLSID+Hомep ActiveX-объекта}.
■ ShellFolder — параметры этого подраздела определяют различные свойства значка ActiveX-объекта, а также команд его контекстного меню. Подраздел может включать в себя следующие параметры.
• WantsFORDISPLAY— присутствие этого параметра строкового типа запрещает системе выводить название соответствующего ActiveX-объекта под его значком. Например, если создать этот параметр в ветви реестра {645FF040-5081-101B-9F08-00AA002F954E}, то можно добиться такого же эффекта, как и на рис. 4.7.
Рис. 4.7. Скрытие названия значка Корзины
• HideInWebView — присутствие этого параметра строкового типа говорит системе о том, что она должна скрывать значки, соответствующие данному ActiveX-объекту, при использовании нового вида окна Проводника (при установке переключателя в положение Отображение списка типичных задач в папках на вкладке Общие диалога Свойства папки).
• HideFolderVerbs — присутствие данного параметра строкового типа говорит системе о том, что она не должна добавлять к контекстному меню значка ActiveX-объекта команды контекстного меню стандартного идентификатора Folder.
ПРИМЕЧАНИЕ
Существует и альтернативная возможность — сказать системе, что она обязана добавить к контекстному меню данного ActiveX-объекта команды, определяемые идентификатором Folder. Для этого необходимо установить битовую маску 0х20000000 в параметре DWORD-типа Attributes, описание которого приведено ниже.
• Attributes — значение данного параметра DWORD-типа определяет, будут ли отображаться различные стандартные команды контекстного меню для значка данного ActiveX-объекта. Параметр является битовой маской, биты которой имеют следующую функциональность: 0х00000001 — определяет присутствие команды Копировать; 0х00000002 — устанавливает присутствие команды Вырезать; 0х00000010 — определяет команду Переименовать; 0х00000020 —устанавливает команду Удалить; 0х00000040 — определяет отображение команды Свойства; 0х00000100 — устанавливает отображение команды Вставить; 0х00200000 — определяет отображение команд, содержащихся в подразделе ContextMenuHandlers (он является дочерним по отношению к разделу shellex, который, в свою очередь, располагается в одном из разделов идентификаторов).
Например, на рис. 4.8 отображено контекстное меню значка Корзины с использованием значения параметра Attributes, равного 0х20000030.
Рис. 4.8. Редактирование контекстного меню значка Корзины
ПРИМЕЧАНИЕ
В подразделе ShellFolder может присутствовать DWORD-параметр CallForAttributes. Если его значение отлично от 0, то система не будет использовать содержимое параметра Attributes для ограничения контекстного меню значка данного ActiveX-объекта.
Это далеко не все подразделы, которые могут находиться в ветви ActiveX-объекта, но это самые интересные из них (с точки зрения возможностей изменения). О других подразделах ветви ActiveX-объекта можно узнать в базе данных по реестру, поставляемой вместе с этой книгой.
Другие разделы корневого раздела
Уже была рассмотрена большая часть содержимого корневого раздела реестра HKEY_CLASSES_ROOT — разделы расширения, идентификатора и раздел CLSID, но, кроме них, корневой раздел включает в себя еще несколько разделов, которые стоит описать. Некоторые из описываемых в разделах параметров реализуют уникальные возможности, которых в Windows больше никакими другими способами достичь нельзя.
■ DeskLink — реализует возможность создания ярлыков на Рабочем столе с помощью команды контекстного меню файлов Отправить. Он описывает ActiveX-объект, предназначенный для выполнения этой операции. Если удалить или переименовать этот раздел, то соответствующая возможность будет запрещена.
■ Applications — определяет список программ, которые будут отображаться в диалоге Открыть с помощью. Он включает в себя подразделы, названные в честь соответствующих программ. Если подраздел присутствует, то диалог Открыть с помощью будет содержать возможность открытия файла с помощью этой программы.
Раздел Applications имеет и противоположную описанной выше функции возможность — он определяет те программы, которые никогда не будут отображаться в диалоге Открыть с помощью. Если программа не должна отображаться в диалоге, то в дочернем подразделе раздела Applications, названном в честь данной программы, нужно создать параметр строкового типа NoOpenWith. Значение этого параметра не используется.
Можно еще создать строковый параметр NoStartPage. Если в дочернем подразделе раздела Applications, названном в честь данной программы, будет находиться приведенный строковой параметр, то, сколько бы вы ни вызывали соответствующую программу, она не будет отображаться в списке часто используемых программ нового меню Пуск.
Еще один параметр строкового типа, который может содержаться в подразделе, названном в честь необходимой программы, — TaskbarGroupIcon. Его значение определяет путь к файлу рисунка, который будет использоваться в качестве значка сгруппированных программ на Панели задач. Например, можно создать данный параметр в ветви реестра HKEY_CLASSES_ROOT\Applications\explorer.exe (рис. 4.9).
Рис. 4.9. Изменение рисунка группы программ
Но, кроме параметров, раздел Applications может хранить и другие подразделы. Например, в нем может находиться подраздел shell, включающий в себя дополнительные глаголы (или переопределение уже существующих) для файлов, ассоциированных с соответствующей программой уже после того, как будет изменено содержимое подраздела shell ветви HKEY_CLASSES_ROOT\Applications\«приложение».
Кроме подраздела shell, в некоторых разделах ветви системного реестра HKEY_CLASSES_ROOT\Applications могут находиться и другие подразделы. Например, в ветви HKEY_CLASSES_ROOT\Applications\explorer.exe может располагаться подраздел drives. С его помощью можно переопределить файлы рисунков, применяемые в качестве значков логических дисков. Для этого достаточно в подразделе drives создать вложенный подраздел с названием соответствующим букве диска, значок которого нужно изменить, а в созданном подразделе нужно создать еще один — DefaultIcon. Параметр (По умолчанию) этого подраздела как раз и определяет значок, используемый для отображения данного диска. Например, чтобы сменить значок диска H:, нужно изменить параметр (По умолчанию) ветви реестра HKEY_CLASSES_ROOT\Applications\explorer.exe\drives\h\DefaultIcon.
■ MIME — содержит сведения обо всех типах MIME, зарегистрированных на компьютере. Описание всех этих типов находится в ветви системного реестра HKEY_CLASSES_ROOT\MIME\Database\Content Type, включающей в себя подразделы с именами, соответствующими типу (audio/basic, image/bmp, text/plain и т.д.). Эти подразделы могут хранить следующие параметры:
• CLSID — определяет CLSID-номер сервера ActiveX, который будет обслуживать данный тип;
• Extension — устанавливает расширение файла, которое использует данный тип MIME;
• Encoding — данный параметр BINARY-типа определяет код для кодировки данных MIME.
■ AppID — предназначен для определения настроек удаленной активизации и защиты различных ActiveX-объектов, описанных в разделе CLSID. Как и CLSID, раздел AppID хранит список подразделов, названных в честь конкретного CLSID-номера ActiveX-объекта. О параметрах и подразделах этих ветвей реестра здесь рассказано не будет. Тем не менее если эта тема вам интересна, то в базе данных по реестру, поставляемой вместе с книгой, есть сведения о параметрах и подразделах этой ветви реестра.
Глава 5