О реестре Registry и настройке системы
Данная статья представляет собой компиляцию трех статей, которые опубликованы в журнале PC Magazine в 1995-1996 гг. (24 октября, 7 ноября и 9 январ соответственно). В переводе используется терминология, принятая фирмой Microsoft для российской версии Windows 95, которая вышла в свет 10 ноября 1995 г. Компиляци выполнена Михаилом Коллегановым.
Единая база данных заменяет многочисленные конфигурационные файлы Windows 3.x.
Первоначально среда Windows обращалась только к двум системным конфигурационным файлам - CONFIG.SYS и AUTOEXEC.BAT. В Windows 2.x к этим файлам добавились WIN.INI и SYSTEM.INI, а затем число конфигурационных файлов стало почти бесконтрольно расти по мере появления регистрационной базы OLE, файла PROTOCOL.INI в системе Windows for Workgroups и множества INI-файлов для прикладных пакетов. Система Windows 95 может считывать эти конфигурационные файлы, чтобы обеспечивать совместимость сверху вниз, но их многочисленные обязанности теперь возложены на двоичный объект, называемый реестром (Registry).
Хотя реестр все еще поделен на несколько файлов, редактор реестра Windows 95 (Registry Editor) обращается к нему как к единому целому. Така особенность - долгожданный переход от коллекции разных ASCII-файлов в Windows 3.x, но реестр устроен намного сложнее, чем его ASCII-собратья. Вместо хранени информации об установочных параметрах в форме последовательного списка в Windows 95 используетс иерархическая древовидная структура, которая заменяет простые записи в INI-файле сложными именами типа My Computer\HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069- A2D8-08002B30309D}\DefaultIcon.
Недостаточная полнота документации, предоставляемой компанией Microsoft, еще более усложняет ситуацию. В комплекте Windows 3.1 Resource Kit имелось более 70 стр., посвященных INI-файлам. Хотя эти страницы содержали несколько ошибок (там указывались ограничени Windows 3.0, которые были устранены уже в Windows 3.1), они были поистине бесценны для вдумчивых пользователей Windows. Напротив, в Windows 95 Resource Kit реестр документирован на 25 меньших по объему страницах, которые "разбавлены" рисунками и замечаниями общего характера. Компания Microsoft тем самым постепенно переходит от плохо документированной системы средней сложности к системе, которая более чем сложна и практически недокументированна.
Хотя многие параметры реестра можно изменить с помощью диалоговых окон "Проводника" (Explorer), "Панели управления" (Control) или других программных средств оболочки, часто приходится редактировать реестр непосредственно. Для облегчения выполнения этого процесса в настоящей статье мы опишем реестр и его редактор, а затем последовательно выполним ряд действий по настройке системы.
Редактор Registry Editor - это работающая в двух режимах программа, которая может вызываться из среды Windows или из командной строки реального режима DOS. Система Windows 95 автоматически инсталлирует "Редактор реестра" в папку Windows, но не помещает ее системную аббревиатуру (shortcut, в терминологии Microsoft "ярлык") в меню "Пуск" (Start) или на "Рабочий стол" (Desktop). Для ускоренного доступа к этому редактору необходимо сформировать аббревиатуру самостоятельно или просто набрать regedit.exe в диалоговом окне "Выполнить" (Run).
Когда вы запускаете редактор из среды Windows, он выводится в окне с несколькими панелями, напоминающем интерфейс "Проводника": древовидная структура разделов (keys) реестра (аналог папок для файлов) отображаетс слева, а содержимое индивидуальных элементов - справа. При первом запуске редактора реестра, в его окне отображаются шесть корневых (root) разделов, а все остальные вложены внутрь этих шести. Каждый раздел содержит разнообразные подразделы - аналоги подкаталогов - и параметры или поля значений (value entries) - аналоги файлов. Параметр состоит из трех частей: имя, тип данных - dword (двойное слово), binary (двоичный) или строка ASCII символов - и сами данные (их размер может достигать 64 Кбайт). Каждый раздел содержит строковый параметр, имеющий имя "По умолчанию" (Default), которое обычно (но не всегда) идентифицирует его назначение.
В правой половине экрана отображаются значение "По
умолчанию", строковый параметр MRUList и несколько
двоичных параметров (a, b, c, и т. д.). Из-за глубокой
иерархической структуры реестра параметрам
присваиваются чрезвычайно длинные имена:
My Computer\HKEY_CURRENT_USER\Software\Microsoft\
Windows\CurrentVersion\Applets\Explorer\StreamMRU\
(По умолчанию)
В окне редактора реестра, в нижней части, выводитс строка состояния, где показан полный маршрут доступа к выделенному в настоящий момент разделу или его параметру .
Поскольку при загрузке отображаются только корневые разделы , чтобы добраться до поля значения какого-либо важного подраздела, придется много раз щелкнуть мышью. Можно применять диалоговое окно "Найти" (Find) дл перехода к данному элементу, но выполнение этого действия почти столь же медленно, как и раскрытие дерева вручную (однако команда "Найти" полезна, когда вы точно не знаете, где искать нужный подраздел).
Редактор реестра не обладает столь богатыми возможностями как "Проводник"-Explorer, но его средства редактирования вполне интуитивно понятны. Для изменени имен разделов или их параметров выберите функцию "Переименовать" (Rename) либо из меню "Правка" (Edit), либо из меню, которое вызывается щелчком правой клавишей мыши на разделе реестра. Эти два меню также позволяют создавать новые разделы и присваивать им значения. Для редактирования конкретных данных реестра просто дважды щелкните клавишей мыши на имени параметра. Появится диалоговое окно, в которое выводятся шестнадцатеричный поток двоичных данных и его ASCII-представление . Эти данные реальные, и их можно редактировать непосредственно.
Редактор Registry Editor представляет реестр в виде единой базы данных, но в действительности он состоит из двух или более файлов. Обычно этими двумя файлами являются C:\Windows\User.dat, в котором хранятс данные, специфичные для конкретного пользователя, и C:\Windows\System.dat, где содержатся данные, специфичные для компьютера.
Такое деление дает возможность пользователям подключаться к нескольким машинам, работающим в сети. Например, пользователь X обычно входит в сеть с машины X с данным набором файлов реестра. Поскольку эти файлы взаимно дополняют друг друга, пользователь X может также подключаться к сетевой машине Y со своим собственным User.dat и System.dat машины Y. В результате совокупность параметров, характерная дл пользователя X, задаст такие элементы, как оформление, а набор параметров компьютера Y укажет на драйверы жесткого диска и другие элементы, специфичные дл данного компьютера.
Та же самая парадигма позволяет конфигурировать один компьютер для нескольких пользователей. Например, чтобы настроить домашний ПК для нескольких членов семьи, вызовите утилиту "Пароли" (Passwords) "Панели управления", щелкните мышью на закладке "Конфигурации" (User Profiles) и включите кнопку с фиксацией , котора обозначена словами "Каждый пользователь может иметь свою систему настроек, выбираемую при входе в Windows" ("Users Can Customize Their Preferences and Desktop Settings").
Если новый пользователь входит в систему и настраивает интерфейс, Windows 95 создает новую папку в каталоге C:\Windows\Profiles, который содержит копию User.dat и папок "Главное меню" (Start Menu) и "Рабочий стол". В новый файл User.dat будут внесены записи дл новых папок "Главное меню" и "Рабочий стол". Реестр дл этого нового пользователя строится из нового блока User.dat и System.dat.
Исправлять и содержимое разделов, и значени параметров легко, но, прежде чем это делать, всегда следует принимать ряд минимальных мер предосторожности. Во-первых, создайте загрузочную дискету, вызвав утилиту "Установка и удаление программ" (Add/Remove Programs) Панели управления и щелкнув на закладке "Системный диск" (Startup Disk). Такая операция позволит запустить Windows 95 с гибкого диска, если не удастся сделать это с жесткого диска. Во-вторых, создайте как двоичную, так и текстовую резервные копии самого реестра. Двоичную копию можно создать, скопировав User.dat и System.dat из папки Windows. Для получения текстовой резервной копии воспользуйтесь функцией экспорта редактора реестра.
Функции экспорта и импорта редактора позволяют легко
переносить файлы реестра, которые представляют собой
образ дерева реестра в формате ASCII. Файл реестра
имеет расширение REG и содержит последовательный список
значений параметров:
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Faxcover.Document\DefaultIcon]
@="C:\\Windows\\Faxcover.exe, 1"
Это предложение идентифицирует конкретный параметр (в квадратных скобках) и назначает подстроку данных дл его строкового значения, присваиваемого по умолчанию (@ означает "По умолчанию"). В файле Faxcover.exe хранитс несколько пиктограмм, которые могут быть назначены страницам, предваряющим факс-сообщение. Приведенна выше подстрока данных указывает, что система должна использовать вторую пиктограмму из Faxcover.exe (как объясняется ниже, ", 1" обозначает вторую пиктограмму).
Для создания REG-файла из некоторой ветви реестра просто выделите соответствующий раздел и выберите пункт "Экспорт файла реестра" (Export Registry File) из меню редактора реестра. Команда "Импорт файла реестра" (Import Registry File) выполняет обратное действие: после того как будет выбран конкретный раздел, она вставит содержимое REG-файла в ту ветвь дерева реестра, которая выбрана. Кроме того, можно импортировать информацию о реестре, просто дважды щелкнув мышью на имени REG-файла или запустив редактор реестра из командной строки DOS. Для импорта файла реестра из командной строки DOS наберите имя исполнимого модул редактора, а за ним имя файла: Regedit Filename.reg. Запуск редактора из DOS может помочь устранить ошибки в реестре, которые отключают Windows, или восстановить расположение пиктограмм на "Рабочем столе" (как это сделать, будет разъяснено ниже).
Если вы собираетесь экспериментировать с ветвью реестра, экспортируйте ее до внесения изменений. В случае необратимой ошибки можно будет импортировать исходные параметры и восстановить работоспособную конфигурацию. На тот случай, если вы забудете сделать резервную копию, помните, что система Windows 95 после успешной начальной загрузки автоматически копирует реестр в два резервных файла (User.da0 и System.da0). Кроме того, на компакт-диске Windows 95 имеетс программа Cfgback.exe, которая позволяет сохранять до девяти последовательных версий реестра.
Чтобы по-иному взглянуть на реестр, экспортируйте его в текстовый файл на своем компьютере, внесите изменения в настройку системы и повторите экспорт реестра. Затем, с помощью утилиты построчного сравнени файлов, найдите все изменения, которые система внесла в реестр. Мы пользовались программой Windows 3.1 Norton Deskedit, которая имеет мощную функцию сравнения файлов (аналогичная функция в Windows 95 - Norton Navigator - с такими большими файлами не справляется). Кроме того, для выявления различий можно применить функцию "Сравнение версий" (Compare Version) программы Word for Windows.
В некоторых случаях два разных подраздела реестра будут указывать на один и тот же блок данных. Чтобы заметить это, посмотрите запись значение параметра "По умолчанию" в подразделе HKEY_CLASSES_ROOT\.386, затем перейдите к значению "По умолчанию" подраздела HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.386. Каждое из них содержит подстроку, в которой написано vxdfile. Если изменить эту строку в одном разделе, она одновременно изменится и в другом. Рассмотрев эти разделы еще пристальнее, можно установить, что и HKEY_CLASSES_ROOT, и HKEY_LOCAL_MACHINE\SOFTWARE\Classes содержат не только идентичные данные, но и идентичные подразделы.
Как только вы заметите такие совпадения, станет проще разобраться в структуре реестра. Он содержит шесть корневых разделов, формирующих первый уровень дерева. Все остальные разделы представляют собой подразделы этих шести:
Таким образом, в реестре есть только три раздела, которые не дублируются: HKEY_DYN_DATA, HKEY_USERS и HKEY_LOCAL_MACHINE. Следовательно, если вы экспортируете реестр целиком, получающийся в результате REG-файл содержит лишь два корневых раздела - HKEY_USERS и HKEY_LOCAL_MACHINE (при этом HKEY_DYN_DATA размещается в ОЗУ).
Структура корневых разделов может показатьс избыточной, но такое дублирование весьма полезно. Разделы HKEY_CURRENT_USER и HKEY_CURRENT_CONFIG позволяют отделить текущие установочные параметры вашей машины от других, не всегда используемых характеристик системы. Раздел HKEY_CLASSES_ROOT - по сути копия всей регистрационной базы данных, которая наиболее важна при изменении настройки системы. Именно здесь определяетс порядок работы с файлами различных типов Windows 95.
Чтобы открыть документ в среде Windows 95, достаточно дважды щелкнуть клавишей мыши на его пиктограмме. Эта функция реализуется с помощью модул "Типы файлов" (File Types) Windows 95, который устанавливает связи между прикладными программами и расширениями файлов. Выбрав пункт "Вид|Параметры" (View|Options) меню "Проводника" и перейдя к закладке "Типы файлов", можно просматривать, редактировать или создавать новые типы файлов. Однако механизм делени файлов на типы заложен в реестре. Раздел HKCR содержит подраздел-идентификатор для каждого типа файлов , подраздел для каждого расширения, связанного с типом файла , и пару специальных подразделов с именами * и CLSID.
Значением подраздела расширения по умолчанию служит имя соответствующего подраздела-идентификатора, в котором хранится название типа файла и его характеристики. Например, для командных файлов в DOS используется расширение bat. В реестре имеетс подраздел с именем .bat, который содержит ссылку на подраздел batfile. В поле значения "По умолчанию" дл командных файлов записано "Пакетный файл MS-DOS" (именно так описывается тип файла на закладке "Типы файлов"). Таким образом, при двойном щелчке клавишей мыши на обозначении командного файла система обратитс к подразделу .bat, а далее перейдет к подразделу batfile, откуда и получит указание запустить этот командный файл в сеансе DOS.
Однако не все идентификаторы связаны с расширениями. К числу таких типов системных файлов относятся Audio CD, "Диск" (Drive), "Папка с файлами" (Directory) и "Папка" (Folder). В подразделе * определяютс расширения оболочки и команды контекстного меню дл всех файлов, а в CLSID перечислены все системные объекты, относящиеся к конкретным идентификаторам.
Большинство подразделов расширений содержат только название идентификатора, с которым они связаны, но некоторые могут иметь подраздел ShellNew. Этот подраздел позволяет включать соответствующий пункт в меню "Создать" (New) Windows 95 и может содержать ссылки на исполнимые модули или макрокоманды.
Раздел-идентификатор определяет конкретный тип файла
через обширный массив подразделов. Подраздел
DefaultIcon содержит указание на пиктограмму типа
файлов (каждый документ, относящийся к связанному с
данным расширением типу, обозначается этой
пиктограммой). В подразделе Shell перечисляютс
действия, которые можно выполнять над файлами этого
типа. Все действия перечислены в контекстном меню
документа (доступ к нему осуществляется щелчком правой
клавиши мыши на документе). Название действия по
умолчанию - оно выполняется в ответ на двойной щелчок
мышью на документе - выводится полужирным шрифтом .
Наконец, через подраздел shellex осуществляетс
подключение специальных обработчиков, которые могут
потребоваться для файлов этого типа. Для некоторых
редко встречающихся экземпляров раздел-идентификатор
будет содержать и другие подразделы, но мы сосредоточим
свое внимание на этих трех.
Это макрокоманда на языке Word Basic просит вас
переименовать файл счета, который был создан с
помощью пункта меню "Создать" (New), сохраняет его с
расширением doc и удаляет исходный файл.
Макрокоманда для шаблона "Счет" в меню New
Sub Main
CurrentFile$=FileName$()
NewDir$="D:\My Documents\Invoices"
Prompt$="Создание нового счета в каталоге "+NewDir$+":"
On Error Goto Bye
FName$=InputBox$(Prompt$,"Система выписки счетов","invoice.doc")
While Files$(NewDir$+Fname$)<>""
EPrompt$="Файл с именем "+NewDir$+FName$
EPrompt$= EPrompt$+" уже существует. "Пожалуйста, введите новое имя."
FName$=InputBox$(EPrompt$,"Система выписки счетов","invoice.doc")
Wend
FileClose 1
On Error Goto BadName
Name CurrentFile$ As NewDir$+FName$
FileOpen NewDir$+FName$
Goto Bye
BadName:
Msg$="Неудача. Либо нельзя найти "+CurrentFile$
Msg$= Msg$+", либо "+NewDir$+FName$
Msg$= Msg$+" неправильное название файла."
MsgBox Msg$,"Система выписки счетов",16
Bye:
End Sub
Для доступа к меню "Создать" выберите "Создать", щелкнув правой клавишей мыши на "Рабочем столе" (Desktop), по открытой папке или окну "Проводника". Это меню - оно позволяет создавать новые документы зарегистрированных прикладных программ - определяетс через подразделы ShellNew в HKCR.
ShellNew - это обычно единственный подраздел дл расширения (если оно вообще его имеет). Однако, если с расширением связано несколько записей меню New, в нем содержится несколько вложенных подразделов ShellNew. Например, раздел .doc имеет три отдельных подраздела, представляющих различные записи: Word.Document.6, Word.Document и Notepad.Document.1, у каждой из которых есть свои собственные ShellNew. Некоторые расширени могут содержать вложенные подразделы ShellNew, даже если у них есть только одна запись в меню New.
Подраздел ShellNew содержит один или несколько параметров:
New Publicname .ext
где Publicname - строка, хранимая в поле "По
умолчанию" подраздела-идентификатора, а ext -
соответствующий подраздел расширения. Если вы создаете
текстовый файл, например Windows называет его Текстовый
документ.txt (New Text Document.txt). Из значения по
умолчанию в подразделе-идентификаторе txtfile
считывается Текстовый документ, а txt - соответствующее
расширение.
Для демонстрации возможностей HKCR мы создали пункт меню "Создать" для шаблона счета. Этот пример может показаться нерациональным, но он поможет понять некоторые концепции, лежащие в основе реестра.
Сначала создадим подраздел .inv, указывающий на подраздел-идентификатор InvoiceFile. Этот подраздел в поле "По умолчанию" должен содержать значение "Счет". Для появления пункта "Счет" в меню "Создать" необходимо, кроме того, сопоставить этому расширению исполнимый модуль. Для этого просто вставьте маршрут доступа к WinWord в элемент HKCR\InvoiceFile\Shell\Open \Command. Наконец, скопируйте свой шаблон счета в каталог C:\Windows\ShellNew до создания в подразделе .inv элемента ShellNew, содержащего поля FileName и Command. Когда этот пункт будет выбран из меню "Создать", выполнение команды приведет к открытию нового файла-счета с именем Счет.inv в окне WinWord, с последующим вызовом макрокоманды на языке WordBasic. Эта макрокоманда предложит переименовать файл, сохранит его с расширением doc в указанном каталоге и удалит inv-файл.
Подраздел DefaultIcon связывает пиктограмму с
конкретным файлом или прикладной программой.
Большинство значений в полях DefaultIcon строго
придерживаются формата:
C:\Windows\Filename, N
где Filename - название файла, в котором хранится одна
или несколько пиктограмм (обычно exe-, dll- или
ico-файл), а N - целое число, которое показывает,
которую пиктограмму из серии следует использовать
(первая из них имеет номер 0, вторая - 1 и т. д.).
В некоторых случаях N - отрицательное число. Такие
значения представляют собой идентификаторы ресурсов, а
не номера пиктограмм (все ресурсы в исполнимых
модулях имеют двоичный идентификатор). Для вывода
пиктограмм из конкретного файла на экран вызовите
окно свойств аббревиатуры, щелкните на кнопке
"Сменить значок" (Change Icon) и выберите файл,
который хотите просмотреть.
Некоторые значения подразделов DefaultIcon содержат строку %1. В таких случаях файл, который обращается к этой пиктограмме, сам генерирует ее (в рамках HKCR %1 - переменная, которая связывается с файлом, ассоциированным с данным подразделом). Для работы этого механизма либо система, либо файл должен предоставить обработчик пиктограмм (IconHandler). Система предоставляет обработчики пиктограмм для файлов exe-, ico-, cur-, ani- и bmp-. Утилита Hyperterminal (ее подраздел в реестре обозначается htfile) - это пример файла, который имеет свой собственный обработчик пиктограмм. Система использует строку %1 для exe-, ico-, cur- и ani-файлов, но не для bmp-файлов. Если вы желаете, чтобы пиктограмма bmp-файла представляла собой миниатюрную копию настоящего изображения (thumbnail), можно поменять значение элемента HKCR\Paint\Picture\ DefaultIcon на %1. К сожалению, если системе приходится считывать довольно большое растровое изображение, вы можете столкнуться с большой задержкой при каждом обновлении экрана.
Когда подраздел-идентификатор не содержит элемента DefaultIcon, система Windows 95 должна получить пиктограмму откуда-то еще. Если с идентификатором связан исполнимый модуль, его пиктограмма уменьшается в размере и помещается внутрь пиктограммы документа (изображения чистого листа бумаги). Если связанного исполнимого модуля нет, система использует стандартную пиктограмму с логотипом Windows 95.
Подраздел Shell идентификатора содержит названи всех действий, которые связаны с конкретным типом файлов. В подразделе-идентификаторе batfile, который управляет командными файлами, предусмотрены подразделы для редактирования, открытия и печати. Каждое действие определяется параметрами, перечисленными на вкладке Типы файлов для типа "Пакетный файл" MS-DOS и в контекстном меню, которое вызывается при щелчке правой клавишей мыши на изображении командного файла .
Каждое действие описывается командной строкой.
Значение "По умолчанию" для этого подраздела всегда
содержит командную строку, в которой имеетс
псевдопеременная %1. Она указывает на файл, над которым
выполняется действие. Например, командная строка дл
редактирования командного файла MS-DOS имеет следующий
вид:
C:\Windows\Notepad.exe %1
Когда вы щелкаете правой кнопкой мыши на изображении
командного файла и выбираете "Изменить" (Edit), система
открывает этот файл в окне "Блокнота" (Notepad). Если
используются длинные имена файлов, то в большинстве
случаев аргумент %1 следует заключать в кавычки. Без
кавычек прикладная программа может неверно
интерпретировать пробелы, содержащиеся в имени файла.
Когда происходит вызов контекстного меню файла, действие обычно называется точно так же, как и соответствующий ему подраздел. Однако так происходит только тогда, когда параметр "По умолчанию" содержит пустую строку. Если эта строка не пуста, то она становится именем действия. Это дает возможность в интернациональных версиях Windows использовать английские названия подразделов реестра (например, open) и названия на ином языке в контекстных меню.
По соображениям совместимости с определенными прикладными программами Windows 3.x можно обнаружить подразделы Shell в подразделах расширений, а не в подразделах-идентификаторах, но это случаетс исключительно редко.
Точно так же как все мы нуждаемся в личных идентификаторах системы социального обеспечения (речь идет о США. - Прим. пер.), чтобы отличать нас от других граждан страны, программному объекту требуется GUID - глобально уникальный идентификатор (globally unique identifier). В системе Windows 95 к GUID относятс CLSID (classes identifiers, идентификаторы классов), которые впервые были использованы в спецификации OLE. CLSID - это 16-байт значение, содержащее 32-шестнадцатеричные цифры в формате 8-4-4-4-12 (8 цифр, дефис, 4 цифры, дефис и т. д.).
Производители программного обеспечения могут получить CLSID для объекта, запросив его в корпорации Microsoft или запустив программы, которые входят в состав Microsoft SDK (Uuuidgen.exe) и DDK (Guidgen.exe). Когда вы запускаете такую программу, первые восемь шестнадцатеричных цифр генерируютс случайным образом, следующие четыре формируются исход из текущей даты и времени, а последние 20 цифр вычисляются на основе аппаратных характеристик компьютера. Вероятность формирования одного и того же числа дважды ничтожно мала.
CLSID представляют собой просто имена, которые
используются операционной системой для идентификации
указанных объектов. Например, подраздел "Портфель"
(Briefcase) должен использовать независимый объект при
создании нового экземпляра "Портфеля". Следовательно,
он содержит свой подраздел CLSID, который выглядит
так:
{85BBD920-42A0-1069-A2E4-08002B30309D}
Таким образом, в разделе Briefcase имеется подраздел,
значение "По умолчанию" которого содержит приведенную
выше строку.
Все CLSID перечислены в разделе HKCR\CLSID. Поле "По умолчанию" каждого подраздела CLSID содержит название объекта, как, например, CD Audio Track или Microsoft Excel Worksheet. Эти разделы также содержат другие подразделы, которые определяют объект. Два самых типичных объекта - InProcServer и InProcServer32, которые содержат динамически компонуемые библиотеки (DLL), вызываемые при обращении к обработчикам объектов в процессе реализации OLE-связи.
Для разработчиков наиболее привлекательна особенность среды Windows 95 состоит в ее расширяемости - независимые фирмы могут дополнять оболочку специальными обработчиками. Для настройки обработчика получите значение CLSID, присвойте его DLL через подраздел InProcServer и сошлитесь на этот CLSID где-либо в HKCR. Ссылки на такие обработчики обычно содержатся в подразделе shellex раздела-идентификатора.
Вот примеры некоторых типичных обработчиков:
Закладка "Типы файлов" (File Types) в меню "Вид|Параметры" (Viww|Options) "Проводника" (Explorer) позволяет редактировать большинство файлов, но определенные параметры нельзя изменить. Например, действие по умолчанию для командного файла запускает его, а не открывает в окне "Блокнота" или WordPad. Следовательно, когда вы дважды щелкаете кнопкой мыши по изображению файла AUTOEXEC.BAT, открывается окно DOS и этот файл выполняется. Однако, если вы хотите изменить это выполняемое по умолчанию действие и редактировать командный файл при двойном щелчке, закладка "Типы файлов" не позволит сделать это. Кнопка "По умолчанию" (Set Default) для типа "Пакетный файл MS-DOS" всегда отображается серым цветом (как отключенная).
Это происходит потому, что подраздел HKCR\batfile содержит параметр EditFlag. Такие параметры используются повсюду в реестре, чтобы помешать неопытным пользователям изменить определенные настройки системы. Двоичные данные в поле EditFlag подраздела batfile выглядят как d0 04 00 00. Если изменить это значение на 00 00 00 00, появится возможность изменять любые параметры командного файла. Однако не заносите нули в параметр EditFlag без разбора: если сделать это в системном подразделе-идентификаторе, например Drive или AudioCD, он совсем исчезнет из списка типов файлов. Для идентификаторов, которые связаны с расширениями, допускается приравнивать все EditFlag к 00 00 00 00. Для системных идентификаторов замените данные в EditFlag на 02 00 00 00.
Если вы желаете иметь возможность доступа к некоторым кнопкам, оставляя другие отключенными, необходимо знать назначение каждого бита в EditFlag. Последние два байта данных всегда нулевые, большинство битов первых двух байтов имеют определенные функции:
Биты 4, 5 и 6 в байте 2 влияют только на защищенные от правки действия. В разделах, описывающих действи (типа HKCR\batfile\shell\open), параметры EditFlag определяют защиту. Если бит 1 байта 1 EditFlag такого параметра равен 0 (или у него нет EditFlag), то описание этого действия защищено от редактирования. Если бит 1 байта 1 равен 1, защита снята.
Будьте очень осторожны, изменяя системные параметры EditFlag. Эти внутренние по отношению к операционной системе значения официально не документированы и могут измениться в последующих версиях.
Три системных подраздела-идентификатора - Folder, Drive и Directory - имеют несколько дополнительных отличий. Folder и Drive определяют типы файлов "Папка" и "Диск" соответственно, тогда как Directory определяет тип "Папка с файлами" (File Folder, в поле его значени "По умолчанию" можно прочесть "Папка с файлами"). "Диск" и "Папка с файлами" должны рассматриваться как потомки типа "Папка". Всякое действие, назначенное типу "Папка", применимо к системным папкам (таким, как "Мой компьютер") так же, как к "Папкам с файлами" (например, C:\Windows) и "Дискам" (например, A:).
HKCR также содержит подраздел Unknown, который обрабатывает незарегистрированные расширения. Обычно при щелчке мышью по файлу с незарегистрированным расширением выводится диалоговое окно "Открыть с помощью" (Open With), и при этом предоставляетс возможность выбрать из списка прикладных программ. Можно также создать новые типы файлов на этом экране, установив флажок "Всегда использовать выбранную программу" (Always Use This Programm to Open This File). Если вы хотите открывать все файлы неизвестного типа в ASCII-формате и обходиться без диалога "Открыть с помощью", добавьте подраздел HKCR\Unknown\Shell\ Notepad\Command со значением "По умолчанию" C:\Windows\Notepad.exe %1.
Корневой раздел HKCR хранит массу информации. Он может быть мощным средством настройки типов файлов в Windows 95, но будьте очень осторожны, редактируя его компоненты. Убедитесь, что подготовили двоичные и ASCII-копии реестра до внесения каких-либо изменений.
Обычно на рабочем столе Windows 95 расположены пять связанных с аппаратурой пиктограмм, которые нельз переместить или удалить обычным образом: "Мой компьютер" (My Computer), "Сетевое окружение" (Network Neighborhood), "Входящие" (Inbox), The Microsoft Network и "Корзина" (Recycle Bin) (при установке пакета Windows 95 Plus! добавляется аппаратная пиктограмма Internet). В зависимости от типа выбранной вами установки некоторые из этих пиктограмм могут отсутствовать. Например, если вы не устанавливаете Microsoft Exchange, пиктограмма "Входящие" не требуется. "Портфель" также представляет собой пиктограмму, относящуюся к аппаратуре, но она не зафиксирована на рабочем столе.
В контекстном меню каждой из этих пиктограмм, за исключением The Microsoft Network (против присутстви которой на рабочем столе Windows 95 до недавнего времени возражало Министерство юстиции США), нет пункта "Удалить" (Delete). Однако с помощью реестра можно убрать или переместить все эти пиктограммы в другое место.
Хотя существует возможность удалить пиктограмму "Сетевое окружение" с помощью редактора системных правил (System Policy Editor), намного проще сделать это через реестр. Найдите раздел HKCU\SOFTWARE\ Microsoft\Windows\CurrentVersion\Policies\Explorer и создайте поле параметра типа DWORD с именем NoNetHood. Если вы присвоите ему значение 1 и перезапустите систему,пиктограмма "Сетевое окружение" не сможет появиться. Для восстановления ее положения измените это значение на 0.
Для изменения других пиктограмм, связанных с аппаратурой, найдите раздел HKLM\SOFTWARE\Microsoft\ Windows\CurrentVersion\explorer\Desktop\NameSpace. Внутри этого раздела каждая пиктограмма имеет свой собственный параметр CLSID, описанный выше, - идентифицирующее индивидуальные объекты 16-байт значение - он указывает на соответствующий подраздел в HKCR\CLSID. Для удаления пиктограммы исправьте значение парного параметра в HKCR\CLSID. CLSID дл каждой из пиктограмм, относящихся к аппаратуре, таковы:
Кроме того, можно создавать новые версии аппаратных
пиктограмм, которые имеют свойства "Переместить",
"Копировать" и "Удалить". Например, пиктограмме The
Microsoft Network соответствует CLSID
{00028B00-0000-0000-C000-000000000046}. Для создани
новой пиктограммы с именем MSNetwork удалите раздел
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer
\Desktop\NameSpace\{00028B00-0000-0000-C000-
000000000046} и создайте новую папку с именем:
MSNetwork.{00028B00-0000-0000-C000-000000000046}
Папка с таким расширением приобретает свойства
оригинальной пиктограммы The Microsoft Network, но при
этом ее можно удалять или перемещать.
Как отмечалось в начале статьи, пиктограмму "Мой компьютер" можно изменить, отыскав подраздел HKCR\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\ DefaultIcon и указав файл с новым изображением в поле "По умолчанию". Подобный метод можно применять дл других пиктограмм, связанных с аппаратурой. Единственная переменная, необходимая для этого, - параметр CLSID. Просто перейдите к соответствующему разделу в HKCR\CLSID, а затем к подразделу DefaultIcon. За исключением "Корзины", значение "По умолчанию" этих разделов представляет собой полный маршрут доступа к файлу, который содержит соответствующую пиктограмму.
Для "Корзины" в разделе DefaultIcon есть три параметра: "По умолчанию", empty (пустая) и full (полная). Параметр empty определяет пиктограмму, обозначающую пустую "Корзину", тогда как full указывает на пиктограмму "Корзины", содержащей, по крайней мере, один файл. Текущая пиктограмма "Корзины" хранится в поле "По умолчанию".
Windows 95 извлекает большинство своих основных системных пиктограмм из файла C:\Windows\Shell32.dll. Первые 42 пиктограммы в этом файле показаны , представляющем собой копию экрана программы Microangelo фирмы Impact Software. Изображения с номерами 006 и 007 употребляются для обозначения накопителей на гибких дисках на "Рабочем столе" или в папке "Мой Компьютер". Пиктограмма с меткой 030 обозначает системные аббревиатуры, а 029 показывает предоставляемые в общее пользование накопители, каталоги и принтеры. Роли других пиктограмм из файла Shell32.dll таковы:
C:\Windows\System\Shell32.dll, 6,
где 6 указывает на седьмую пиктограмму.
Для изменения системной пиктограммы необходимо
создать новый раздел HKLM\SOFTWARE\Microsoft\Windows\
CurrentVersion\explorer\ShellIcons (Если установлен
пакет Windows 95 Plus!, этот раздел уже есть.) Значени
параметров в этом разделе - он переопределяет функции
пиктограмм из файла Shell32.dll - записываются в
следующем формате:
N = Filename, n
N - число от 0 до 41, указывающее на конкретную
пиктограмму в Shell32.dll. Filename - маршрут доступа к
файлу с пиктограммой, а n обозначает пиктограмму в этом
файле.
Например, пиктограмма 030 обычно обозначает
аббревиатуру. Однако, если вы хотите помечать
аббревиатуры пиктограммой 031, необходимо создать
следующую запись в разделе ShellIcons (помните, отсчет
ведется от 0, а не от 1):
29 = C:\Windows\System\Shell32.dll, 30.
Такие изменения можно осуществлять без инициализации
системы. Чтобы система Windows могла загружатьс
быстрее, текущие значения ее системных пиктограмм
хранятся в скрытом файле C:\Windows\ShellIconCache. При
начальном запуске система считывает необходимые
изображения из этого файла или создает его заново, если
он отсутствует. Однако, если изменяются размеры
пиктограмм, Windows перестраивает ShellIconCache "на
ходу". Для этого щелкните правой кнопкой мыши на
"Рабочем столе", выберите "Свойства" и перейдите к
вкладке "Оформление" (Appearance). Затем в поле
"Элемент" (Item) выберите "Значок" (Icon). Если вы
измените размер пиктограмм и щелкните по кнопке
"Применить" (Apply), Windows перестроит папку
ShellIconCache и зафиксирует изменения в реестре (тем
же способом легко можно восстановить размер
пиктограмм).
К сожалению, Windows 95 не предусматривает простого механизма сохранения и восстановления положени пиктограмм на "Рабочем столе". Если вы нечаянно выберете пункт "Упорядочить значки" (Arrange Icons), Windows разместит уже расставленные вами пиктограммы строго по алфавиту. Для сохранения своих настроек вам придется прибегнуть к сложному методу правки реестра, который зависит от компьютера и даже может изменятьс со временем.
Положения пиктограмм обычно хранятся в одном из 29 подразделов раздела HKCU\SOFTWARE\Microsoft\Windows\ CurrentVersion\Explorer\Streams. На нашем компьютере они оказались в подразделе HKCU\SOFTWARE\Microsoft\ Windows\CurrentVersion\Explorer\Streams\24.
Для поиска подраздела Streams, в котором зафиксировано описание "Рабочего стола", выделите Streams в редакторе реестра, экспортируйте его в файл Loc.reg и просмотрите последний с помощью "Блокнота". Подраздел Streams обычно содержит два двоичных значения: CabView и ViewView (некоторые имеют только поле ViewView). Положение пиктограмм на "Рабочем столе" хранится в подразделе, который имеет небольшое поле CabView и громадное поле ViewView. Например, в нашей системе ViewView в подразделе 24 содержало 48 строк данных при просмотре в "Блокноте", в то время как длина следующего по величине блока ViewView составляла только полторы строки.
Теперь посмотрим на тот же самый раздел в редакторе реестра. Поскольку редактор отображает данные как в шестнадцатеричном, так и в ASCII формате, можно распознать имена файлов "Рабочего стола" в ASCII-секции окна "Изменение двоичного параметра" (Edit Binary Value), если выбран правильный подраздел.
Как только вы будете уверены в том, что выбрали
нужный подраздел, убедитесь, что Loc.reg размещен в
корневом каталоге вашего диска и добавьте следующую
команду импорта к своему файлу Autoexec.bat:
REM Regedit C:\Loc.reg.
Если вы нечаянно реорганизуете свои пиктограммы на
"Рабочем столе", удалите REM из указанной выше строки и
перезапустите систему. Оформление "Рабочего стола"
будет восстановлено. Для поддержания постоянной
резервной копии вашего видоизменяющегося "Рабочего
стола", восстанавливайте REM и повторно экспортируйте
Loc.reg всякий раз, когда вносите существенные
изменения. Команду импорта следует вставить в файл
Autoexec.bat, поскольку Windows сохраняет текущее
состояние "Рабочего стола" при выходе и считывает его
конфигурацию при начальном запуске.
Однако, поскольку Streams содержит только свежие данные из "Проводника" (подобно описываемым ниже MRU-спискам), подраздел, относящийся к положению пиктограмм на "Рабочем столе", может быть потерян, если эти данные используются нечасто. Если такое случится, следует перемешать пиктограммы на "Рабочем столе", чтобы был создан новый подраздел. Как только вы найдете этот новый подраздел, откройте Loc.reg и измените номер подраздела в начале файла. Наконец, удалите REM из строки команды импорта в файле autoexec.bat и перезапустите систему.
Для автоматического запуска прикладной программы при начальном запуске Windows 3.0 приходилось вставлять команды Run или Load в файл WIN.INI. В Windows 3.1 этот процесс был упрощен за счет появления "Группы запуска" (StartUp) Диспетчера Программ. В Windows 95 имеетс подобная папка "Автозапуск" (Startup), в которой размещаются аббревиатуры (C:\Windows\StartMenu\Program \Startup (C:\Windows\Главное меню\Программы\ Автозагрузка)) и, которая также совместима сверху вниз с INI-файлами.
В дополнение к этим двум методам в реестре имеется, по крайней мере, шесть разделов, которые позволяют загружать программы при запуске системы. Система автоматически выполняет их при инициализации. Четыре из них (Run, RunOnce, RunServices и RunServicesOnce) размещаются в разделе HKLM\SOFTWARE\Microsoft\Windows\ CurrentVersion и два (Run и RunOnce) - в разделе HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion.
Как позволяют предположить их имена, и в разделе RunOnce, и в разделе RunServicesOnce располагаютс программы, выполняемые только один раз. Они запускаютс при следующем перезапуске Windows, а затем система удаляет их содержимое из реестра. Программы из других разделов выполняются при каждом запуске системы. Разделы Run и RunOnce в HKLM содержат прикладные программы, которые должны загружаться и выполняться до запуска любой другой программы. К числу таких программ относятся программы установки, которые перезапускают машину и завершают настройку прежде, чем будут вызваны программы из обычного набора.
Когда программы запускаются с помощью разделов Run и RunOnce в HKCU, они восстанавливают то состояние, которое сохранили перед последним выходом из системы. Когда такая программа оповещается о выходе из системы, она сохраняет информацию об использовавшихся файлах и иных текущих параметрах в этих двух разделах. Разделы RunServices и RunServicesOnce обеспечивают вызов программ до вывода на экран приглашения на вход в систему. Подразделы в HKLM выполняются для всех пользователей на данной машине, тогда как подразделы в HKCU связаны с конкретным пользователем.
При установке дополнительных файлов Windows 95 с помощью диалога "Установка и удаление программ" (Add/Remove Prigrams) и "Панели управления" система находит файлы через запись в разделе HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup. Поле значения SourcePath содержит маршрут доступа к папке или накопителю. Если система Windows 95 устанавливалась с компакт-диска, значение SourcePath указывает на накопитель CD-ROM. Если применялись дискеты, оно указывает на накопитель на гибких дисках.
Это поле может быть полезно, если вы копируете установочные диски Windows 95 на свой жесткий диск. Например, если вы копируете файлы в папку C:\Winstall, измените строковое значение параметра SourcePath с A:\ на C:\Winstall. Таким образом, система всегда будет искать правильную папку при добавлении или удалении программ.
Когда из меню "Пуск" (Start) выбирается пункт "Выполнить" (Run), с помощью появляющегося окна диалога можно быстро запустить исполнимый файл или открыть папку. Список предшествующих команд хранится в разделе HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer \RunMRU (MRU это стандартная аббревиатура словосочетания Most Recently Used - самые последние из использовавшихся). В этом разделе содержатся до 28 параметров (в том числе "По умолчанию"). Если список заполнен, 26 записей идентифицируются буквами алфавита. В них содержатся последние 26 команд (в формате ASCII), которые вы вводили в диалоге "Выполнить" или в диалоге "Перейти" (Go To) "Проводника". В поле MRUList перечисляется 26 алфавитных параметров согласно тому, как давно они использовались. Первая буква соответствует последней команде, вторая - предпоследней и т. д.
Это эффективный метод хранения. Если повторно запускается команда из списка, системе приходитс изменять только порядок букв в строке MRUList. Если выполняется новая команда, последняя буква в строке MRUList перемещается на первую позицию, и соответствующая запись изменяется. Остальные 25 значений не требуется изменять. Для удаления элемента из списка предшествующих команд следует удалить соответствующую ему букву из строки MRUList и перезапустить систему.
Если выбрать "Документ" (Document) из меню "Пуск", можно увидеть последние 15 документов, которые открывались двойным щелчком кнопкой мыши или через стандартный диалог Windows 95. Этот список вызываетс из подраздела HKCU\SOFTWARE\Microsoft\Windows\ CurrentVersion\Explorer\RecentDocs, который содержит свой параметр MRUList и 15 полей значений, помеченных буквами алфавита. В каждом из этих 15 полей хранитс имя документа и имя его ярлыка в C:\Windows\Recent (в двоичном формате).
В разделе HKLM\SOFTWARE\Microsoft\Windows\ CurrentVersion\App Paths имеется несколько подразделов, которые идентифицируют исполнимые файлы в формате NAME.EXE. Значение "По умолчанию" каждого из параметров содержит маршрут доступа к соответствующему исполнимому модулю. Второй параметр, называемый Path, может идентифицировать папки, которые приданы этой программе.
Когда вы набираете NAME в окне диалога "Выполнить", Windows сначала ищет его в папке Windows, затем в системном каталоге и по заданному до запуска Windows маршруту DOS. Если система нигде не находит исполнимого модуля с таким именем, Windows просматривает раздел App Paths. При обнаружении соответствующего параметра она запускает указанный исполнимый модуль.
Набираемое имя может не быть идентично имени исполнимого модуля, но должно соответствовать имени параметра. Следовательно, эти параметры можно применять для присвоения кратких псевдонимов часто используемым программам, командным файлам или группам прикладных программ. В справочнике Windows Interface Guidelines утверждается, что если пользователь перемещает исполнимый модуль, Windows исправляет записи в App Paths, но наш опыт показывает, что это не так.
Знание правильных параметров INI-файлов часто было критически важно при работе в среде Windows 3.x. Поскольку Windows 95 более мощная и более сложна среда, скрытые параметры реестра еще более важны. Несмотря на сложность своей структуры, реестр - долгожданное усовершенствование INI-файлов Windows 3.x. Как только вы ознакомитесь с его конструкцией, вы больше не захотите возвращаться к файлам AUTOEXEC.BAT, CONFIG.SYS и INI-файлам. При работе с Windows 95 вам этого и не придется делать..
Барри Саймон - внештатный редактор журнала PC Magazine и соавтор CD-MOM 95: The mother of All Windows 95 Books (Addison-Wesley, 1995)