Тайны и секреты компьютера
Шрифт:
В подразделе с «внутренним» именем типа файла может содержаться также параметр EditFlag. В зависимости от его значения запрещаются те или иные параметры редактирования действий с этим типом файлов с помощью окна Вид-Параметры-Типы файлов, вызываемого из «Проводника». Вы, наверное, замечали, что редактировать через это окно действия с каталогом или логическим диском нельзя? Так вот это именно из-за значения параметра EditFlag. [38]
В разделе HKEY_CLASSES_ROOT также имеется подраздел CLSID, едва ли не самый большой во всем реестре. Он содержит в себе информацию об обьектах операционной системы, имеющих свои идентификаторы — длинные числа в фигурных скобках, как бы большой список всех их имен. С помощью этого подраздела идет общение между различными компонентами системы, и именно он позволяет слаженно им работать и дает возможность добавлять новые обьекты.
38
Для
Обьектами в операционной системе может стать все, что угодно — программы, папки, компоненты программ и др. Строго говоря, обьект в программистском понимании — это все, что имеет имя и к чему можно обращаться, как к единому целому.
Этой возможностью пользуются разработчики программ, интегрирующихся в систему. Служебные папки, такие, как Панель управления, Удаленный доступ к сети, Принтеры, которые вы наверняка в свое время безуспешно искали на жестком диске, являются именно такими обьектами и имеют свои идентификаторы. Идентификаторы также имеют и реальные папки, выполняющие в системе какие-либо функции, например, Рабочий стол, Корзина. Вы можете даже дать такой идентификатор какой-либо из своих папок (тогда ее, в частности, можно будет включить в окно "Мой компьютер", как показано на рисунке).
Совет. Вот как это можно сделать
1. Откройте раздел реестра HKEY_CLASSES_ROOT\CLSID и добавьте туда раздел с именем {FD4DF9E0-E3DE-11CE-BFCF-….любые 12 цифр и букв…}. Тем самым вы создадите еще один идентификатор обьекта Windows. (Вообще говоря, и остальные цифры могут быть произвольными. Важно лишь, чтобы в реестре не оказалось двух одинаковых идентификаторов.)
2. Добавьте в этот раздел параметр По умолчанию = "Название папки". Здесь введите то имя, под которым вы хотите, чтобы папка отображалась в окне "Мой компьютер".
3. Добавьте в этот раздел подразделы с параметрами:
— DefaultIcon и параметр по умолчанию там — путь к желаемой иконке папки.
— InProcServer32 и параметр по умолчанию там — "shell32.dll", а также параметр «ThreadingModel» со значением «Apartment».
— Shell, в нем подраздел с именем, соответствующим желаемому названию команды по умолчанию для папки (например, "Открыть"), а в нем подраздел Command (то есть так же, как и для любого обычного типа файлов). Введите строку "c: \windows\explorer /n / root…путь к нужной папке…" в качестве значения параметра по умолчанию в подразделе Command. Можете добавить в раздел Shell и другие команды в таком же виде.
— ShellEx, в нем подраздел PropertySheetHandler, а в нем — подраздел с именем, равным имени всего раздела, который вы создали для своей папки (то есть {FD4DF9E0-E3DE-11CE-BFCF-….любые 12 цифр и букв…}). Это, впрочем, не обязательно, но желательно.
— ShellFolder, а в нем — параметр Attributes со значением 0.
Теперь ваша папка стала системным обьектом — таким же, как, скажем, и "Удаленный доступ к сети", «Принтеры». У нее есть свой идентификатор — это длинное выражение в фигурных скобках. Если вы добавите его в качестве имени подраздела в раздел HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\mycomputer\NameSpace, то она появится в окне "Мой компьютер" (имя у нее там будет то, которое вы задали на шаге 2). А чтобы разместить ее на Рабочем столе, добавьте ее идентификатор рядом в раздел Desktop\NameSpace раздела Explorer.
А если вместо строки "c: \windows\explorer…" указать путь к какой-нибудь программе, то тогда получится, что ярлык этой программы вы поместите в окно "Мой компьютер" и сможете запускать ее прямо оттуда!
Некоторые обьекты операционной системы, кроме идентификаторов, имеют еще и словесные имена. В этом случае эти имена отображаются в качестве имен разделов в той же части HKEY_CLASSES_ROOT, что и «внутренние» имена типов файлов и содержат в себе данные об идентификаторе в одном из своих параметров. Их остальные параметры могут хранить различную служебную информацию.
Совет
Для того, чтобы изменить параметры (внешний вид и имя, в частности) системных иконок, найдите разделы с именами, соответствующим их идентификаторам в разделе HKEY_CLASSES_ROOT\CLSID и поменяйте нужные вам параметры в них. Вот идентификаторы некоторых из системных иконок:
{20D04FE0-3AEA-1069-A2D8-08002B30309D} — "Мой компьютеp"
{645FF040-5081-101B-9F08-00AA002F954E} — «Коpзина»
{208D2C60-3AEA-1069-A2D7-08002B30309D} — "Сетевое окpужение"
{FF393560-C2A7-11CF-BFF4-444553540000} — "History"
{992CFFA0-F557-101A-88EC-00DD01 °CCC48} — "Удаленный доступ к сети"
{21EC2020-3AEA-1069-A2DD-08002B30309D} — "Панель управления"
{2227A280-3AEA-1069-A2DE-08002B30309D} — "Принтеры"
Если в «Проводнике» вы создадите папку с именем Имя. Идентификатор, то она превратится в соответствующую папку (верно не для всех идентификаторов, скажем, новый "Мой компьютер" вам так создать не удастся). А добавив параметр InfoTip с строкой в качестве значения в один из таких разделов, можно организовать всплывающую подсказку для соответствующей папки. Добавив некоторые подобные папки в "Главное меню", можно получить весьма интересные результаты.
В параметре "По умолчанию" каждого подраздела раздела CLSID располагается название обьекта, так что вы можете в какой-то степени узнать, для чего тот или иной раздел предназначен.
В каждом подразделе раздела CLSID с именем, соответствующем тому или иному идентификатору, находится подраздел InprocServer или InprocServer32, в параметре "По умолчанию" которого указана библиотека, [39] содержащая программы работы с этим обьектом.
С помощью идентификаторов можно редактировать контекстное меню правой кнопки мыши различных файлов, добавляя туда команды работы с этими файлами. Так, к примеру, происходит при установке программы WinZip, после которой в контекстном меню каждого файла и папки появляется пункт "Add to Zip". Многие антивирусные программы, например, Antiviral Toolkit Pro, позволяют вызывать их из контекстного меню какого-либо файла для проверки именно его, помещая команду своего вызова в это меню.
39
Библиотека — это файл, содержащий в себе программы, вызываемые другими программами, в том числе и операционной системой. По умолчанию имеет расширение. dll. В отличие от собственно программ библиотека не может быть запущена непосредственно.
Чтобы добавить возможность вызова программы из какой-либо библиотеки для работы с тем или иным типом файлов, в разделе CLSID создается подраздел вида {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} и как-нибудь именуется в его параметре "По умолчанию". Затем в этом подразделе создается подраздел InprocServer, а уже в его параметре "По умолчанию" указывается путь к библиотеке, в которой располагаются программы для работы с нужным типом файлов.
Далее в подразделе с именем, равным «внутреннему» имени нужного типа файла или его расширению, создается подраздел ShellEx. В нем могут располагаться так называемые «обработчики» — подразделы с именами PropertySheetHandler, DropHandler и т. д., предназначенные для задания различных способов вызова программ для работы с файлами этого типа. И уже именно в них помещаются разделы (с произвольными именами, обычно отражающими названия программ, для которых они предназначены), в параметрах "По умолчанию" которых указываются соответствующие номера идентификаторов.
Идентификаторы, которые указаны в параметрах "По умолчанию" подразделов раздела ContextMenuHandler, добавляют команды связанных с ними библиотек в контекстное меню правой кнопки мыши. Если добавить идентификатор в подраздел раздела DragAndDropHandler (естественно, предварительно создав сам этот раздел), то команда, соответствующая этому идентификатору, будет вызвана, когда файл того типа, для которого все это расписывается, переносится в какую-либо папку при нажатой правой клавише мыши. То, что указано в разделе DropHandler, срабатывает, когда что-либо переносится мышью на сам файл, — например, когда WinRar добавляет файл в архив при его перетаскивании на иконку архива.
Если в разделе ShellEx раздела реестра с именем, соответствующим «внутреннему» имени какого-либо типа файла или его расширению, создать подраздел PropertySheetHandler, а в нем — подраздел с идентификатором в параметре "По умолчанию", то команда из библиотеки, на которую указывает этот идентификатор, выполняется при вызове пункта «Свойства» контекстного меню правой кнопки мыши файла этого типа и позволяет добавлять к окну свойств файла дополнительные вкладки. Например, так поступает программа DFolder (о ней рассказано в следующей главе), присоединяя к окну свойств папок вкладку с указанием занимаемого файлами этой папки физического места на жестком диске (рис. 14.5).
Рис. 14.5. Возможность появления в меню «Свойства» каждой папки такого окна, как справа, дана параметром в разделе PropertySheetHandler, показанном слева
Именно благодаря возможности использования подобных обработчиков ContextMenuHandler, PropertySheetHandler и др. программы могут изменять меню правой кнопки мыши как им необходимо. К примеру, добавлять в окно свойств окна для быстрого просмотра изображений. Причем такое окно появляется не для всех типов файлов, а только для тех, в подразделе ShellEx которых присутствует обработчик PropertySheetHandler, а в его подразделе указан нужный идентификатор, — то есть только для файлов картинок.
Параметры и разделы, изменяющие контекстное меню, вносятся программами в реестр при их инсталляции или из диалоговых окон самих программ.
Вряд ли, конечно, тем, кто профессионально не занимается программированием, эти данные пригодятся непосредственно в работе. Но, во всяком случае, теперь вы не будете в реестре гостем, незнакомым с местностью, а сможете понимать назначение его записей. Ну, а если когда-нибудь вы возьметесь за изучение технологии составления программ, то эта информация вам в какой-то степени поможет ее освоить.