Роман Клименко - Недокументированные и малоизвестные возможности Windows XP
Рассмотрим наиболее интересные параметры реестра. Первым корневым разделом, структура которого будет описана, станет раздел HKEY_CLASSES_ROOT. Хотя, если быть точным, содержимое этого раздела строится на основе двух ветвей других корневых разделов: HKEY_LOCAL_MACHINESOFTWAREClasses и HKEY_CURRENT_USERSoftwareClasses. Первая ветвь реестра включает в себя информацию о расширениях файлов, используемую всеми пользователями компьютера для построения карты расширений. Вторая ветвь содержит информацию о расширениях, которые либо используются только текущим пользователем, либо переопределяют собой информацию из ветви корневого раздела 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_USERSoftwareMicrosoftWindowsCurrentVersionExplorerShellFolders, то достаточно присвоить параметру FileName только имя необходимого файла.
■ Data — параметр BINARY-типа представляет собой последовательность цифр в шестнадцатиричной системе счисления, которую система будет применять для генерации содержимого файла (например, этот параметр используют файлы с музыкальным контекстом для возможности создания пустого файла-образца звука).
Для примера попробуем создать свою собственную команду в списке Создать. Поскольку большая часть книги посвящена описанию работы с сервером сценариев Windows, сначала будет описан шаблон для быстрого создания основы файла сценария VBS. Для этого нужно воспользоваться ветвью реестра HKEY_CLASSES_ROOT.vbsShellNew. Необходимо создать в ней расширяемый строковый параметр 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 и «Антивирус Касперского» для добавления своих команд в контекстное меню файлов.