Главная > Уголок гика > Панель навигации Проводника изнутри: функционирование и состав

Панель навигации Проводника изнутри: функционирование и состав

В продолжение предыдущей статьи, как я и обещал, мы поговорим о добавлении, удалении и скрытии ActiveX элементов в панели навигации Проводника. Ценность данного материала заключается в иллюстрации того, как работает панель навигации Проводника - по какому принципу она формируется,  и какие параметры ActiveX элементов позволяют и запрещают их отображение в различных виртуальных папках системы. Без этого мой предыдущий пост был бы неполным.

С практической же точки зрения я лично не вижу никакого смысла корпеть над реестром, когда на всё, что угодно, можно разместить ярлыков в папку "Избранное". Ожидающего увидеть в материале восторженные возгласы от появления в панели навигации %s и получить адреналин от "хака венды", я разочарую - пост технический. Поэтому дочитавшему до конца покажу котика.

Теория

В панели навигации Проводника отображаются только те элементы, что находятся в пространстве имен Рабочего стола. В реестре это выглядит как перечень ActiveX компонентов, указанных в виде подразделов ключа (вы это знаете из предыдущей публикации):

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\Desktop\NameSpace

По умолчанию в этом пространстве имён содержатся:

  • библиотеки;
  • папка поиска;
  • панель управления;
  • общие папки;
  • папка «Документы»;
  • личная папка текущего пользователя;
  • корзина;
  • оффлайн файлы;
  • объект «Устройства и принтеры»;
  • ряд служебных ActiveX, например, поиск по RSS-фидам или MAPI папка.

Необходимым, но недостаточным условием присутствия в панели навигации Проводника ActiveX-объекта, принадлежащего к пространству имен Рабочего стола, является наличие пустого строкового параметра PinToNameSpaceTree в подразделе ShellFolder соответствующего раздела HKEY_CLASSES_ROOT\CLSID\"GUID".
Например, GUID папки «Мой компьютер» - {20D04FE0-3AEA-1069-A2D8-08002B30309D}. В подразделе

HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\ShellFolder
присутствует пустой строковый параметр PinToNameSpaceTree, а сам GUID присутствует в пространстве имен рабочего стола:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\Desktop\NameSpace\{20D04FE0-3AEA-1069-A2D8-08002B30309D}

Я неспроста указал, что одного лишь параметра PinToNameSpaceTree может быть недостаточно. И вот почему.

1. Для начала поясню, для чего нужен подраздел ShellFolder. Наличие этого раздела означает, что текущий ActiveX объект имеет интерфейс IShellFolder. В MSDN он описан так:

IShellFolder реализует интерфейс для объектов, расширяющих пространство имен оболочки.

Вирутальная папка, грубо говоря.

2. Некоторые элементы ActiveX имеют параметр WantsParseDisplayName в подразделе ShellFolder. Этот строковый параметр с пустым значением указывает скрывать название (имя в [псевдо]файловой системе, отображаемое в Проводнике) объекта ActiveX. Элементы без названия в панели навигации не отображаются.

3. Теперь самое интересное. Куда более важную роль играет параметр Attributes типа DWORD в подразделе ShellFolder. Он содержит в себе суммарное значение флагов из набора SFGAO. Пожалуйста, ознакомьтесь с этим набором на MSDN.
Этот набор флагов указывает на перечень атрибутов, которыми должен обладать объект, и напрямую влияют на его поведение. Вот, например, значение 0x00000004 соответствуют флагу SFGAO_CANLINK, и означает, что на объект может быть создан ярлык.

Возьмем объект «Все задачи», более известный под именем GodMode. Он не отображается ни в панели навигации, ни в Панели управления — нигде. Рассмотрим, какими флагами снабжен этот ActiveX.
Элемент GodMode обозначен в системном перечне ActiveX в разделе

HKEY_CLASSES_ROOT\CLSID\{ED7BA470-8E54-465E-825C-99712043E01C}

Он имеет пресловутый параметрWantsParseDisplayName в подразделе HKEY_CLASSES_ROOT\CLSID\{ED7BA470-8E54-465E-825C-99712043E01C}\ShellFolder, да и к тому же снабжен вот таким вот набором флагов:0x20100004.

Это суммарное значение, состоящее из следующих флагов:

SFGAO_CANLINK (0x00000004)+ SFGAO_NONENUMERATED (0x00100000)+ SFGAO_FOLDER (0x20000000)

Что тут к чему:

SFGAO_CANLINK – на объект можно создать ярлык.
SFGAO_NONENUMERATED – скрыть объект из перечисления, т.е. нигде не отображать.
SFGAO_FOLDER – объект является [псевдо]папкой.
Ключевое здесь - SFGAO_NONENUMERATED. Именно этот флаг не позволит отображаться ActiveX элементу «Все задачи» в панели навигации Проводника или в Панели Управления.

Чтобы разблокировать этот элемент, необходимо:

  • сбросить флаг SFGAO_NONENUMERATED , приведя значение параметра Attributes к виду 0x20000004,
  • удалить параметр WantsParseDisplayName,
  • создать подраздел 
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel\NameSpace\{ED7BA470-8E54-465E-825C-99712043E01C}

После этого апплет «Все задачи» становится доступным прямо из Панели управления.

Полученные знания позволяет вам управлять составом навигационной панели. Несколько практических примеров для иллюстрации материала на практике, приведенные ниже, освещают несколько пару аспектов добавления новых элементов.

Как скрыть стандартные элементы навигационной панели Проводника

Скроем в навигационной панели элемент «Компьютер», для чего откроем его подраздел в редакторе реестра, используя CLSID Dump:

Давайте сразу перейдем к разделу ShellFolder. Здесь мы видим ожидаемый параметр PinToNameSpaceTree. Вот он:

Именно этот параметр указывает, отображаться ли ActiveX элементу в панели навигации Проводника, или нет. Удаляем параметр PinToNameSpaceTree у элемента «Компьютер», тем самым спрятав его в панели навигации. По шагам:

  • Получите полные права на раздел реестра
    HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\ShellFolder
  • Удалите параметр PinToNameSpaceTree.
  • Перезапустите Проводник.

Компьютер пропал из навигационной панели:


Как добавить ActiveX элемент в навигационную панель Проводника, находящийся в пространстве имён Рабочего стола

Как несложно догадаться, сделать это можно добавлением строкового параметра PinToNameSpaceTree в ShellFolder-подраздел ActiveX объекта, присутствующего в пространстве имён Рабочего стола. В качестве примера разберем добавление Корзины.

  • Найдите в CLSID Dump соответствующий подраздел ActiveX-объекта «Корзина» и откройте его в реестре.
  • Получите полные права на подраздел

    HKEY_CLASSES_ROOT\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\ShellFolder

  • Создайте строковый параметр PinToNameSpaceTree с пустым значением.
  • Перезапустите Проводник.

Как добавить произвольный ActiveX-объект в навигационную панель Проводника, не находящийся в пространстве имён Рабочего стола

В качестве примера мы добавим пресловутый GodMode, папку «Все задачи».

  • Сначала следует удалить параметр WantsParseDisplayName и выставить значение Attributes равным 0x20000004 в разделе
    HKEY_CLASSES_ROOT\CLSID\{ED7BA470-8E54-465E-825C-99712043E01C}\ShellFolder

    Тем самым мы разблокируем ActiveX для визуализации.
  • Затем создайте пустой параметр PinToNameSpaceTree в разделе:

    HKEY_CLASSES_ROOT\CLSID\{ED7BA470-8E54-465E-825C-99712043E01C}\ShellFolder

    В итоге по первому и второму пункту у нас получится вот так:

  • Теперь необходимо добавить GodMode в пространство имён Рабочего стола, дабы панель навигации стала считать его «своим». Для этого создаем подраздел
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\Desktop\NameSpace{ED7BA470-8E54-465E-825C-99712043E01C}

    Этого достаточно.
  • Перезапустите Проводник.
  • Запустив Проводник, вы обнаружите, что элемент «Все задачи» отображается и на Рабочем столе, и в панели навигации. Если второго мы добивались, то значок на рабочем столе нам вовсе ни к чему.

    Его следует убрать.

    Немного теории
    Инструмент "Значки рабочего стола", присуствующий в Windows 7, позволяет скрывать отображение системных иконок на рабочем столе, таких как Сеть, Компьютер, Домашняя группа. Теперь вы знаете, что эти элементы в Windows 7 - это ActiveX элементы. Отключение отображения этих иконок с технической точки зрения являет собой работу с параметрами ветки реестра
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel

    Здесь могут быть представлены DWORD-параметры, имена которых соотвествуют GUID-ам скрываемых ActiveX-объектов, а значения: 0 - отображать элемент, или 1 - скрывать элемент. Этим механизмом можно воспользоваться, скрыв с рабочего стола элемент, добавляемый в панель навигации. 
  • Перейдите в раздел реестра
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel
  • Создайте новый DWORD параметр, в качестве имени параметра используйте GUID скрываемого ActiveX, в качестве значения — единицу.
    В нашем случае это будет выглядеть так:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel\{ED7BA470-8E54-465E-825C-99712043E01C}=DWORD:1

  • Перезапустите Проводник.

На этом я завершаю статьи, посвященные составу Панели управления и её элементам. Я искренне надеюсь, что вам было интересно. Если у вас остались какие-либо вопросы или есть пожелания - добро пожаловать в комментарии.

Обещанный котик:

Winreview.ru можно найти в Вконтакте, Facebook и Twitter. Присоединяйтесь!

Комментарии

  1. ЕГор

    Отлично! спасибо... только учусь правильно взаимодействовать с реестром и ваша статья очень помогла!

  2. ЕГор

    Имеется один вопрос а возможно-ли добавить абсолютно любой свой каталог на панель навигации(не в избранное, а как самостоятельный объект). Они ведь не имеют GUID-ов.

  3. Сергей Ткаченко

    @ЕГор
    Можно.

    Нужно GUID сгенерировать новый и уникальный, можно вот этим http//www.guidgenerator.com/online-guid-generator.aspx

    Затем описать ваш каталог в CLASSES примерно так

    HKEY_CLASSES_ROOT\CLSID\{GUID}\shell\open\command

    @="explorer.exe ваш_путь"

    И затем добавить, как написано в статье.

  4. ЕГор

    0_о... Благодарю, Сергей Ткаченко. Очень полезная информация. А никаких последствий от этого не будет, например в случае удаления данной папки, прописанной вручную?

  5. Сергей Ткаченко

    @ЕГор
    Она просто открываться перестанет с панели навигации. Других последствий не будет

  6. ЕГор

    Спасибо.

  7. Tur

    Сергей, помогите пожалуйста зарегистрировать в win7 64 ActiveX.

    Для работы нужно.

    http//forum.ixbt.com/topic.cgi?id=2284858#4

  8. Сергей Ткаченко

    @Tur
    Не сталкивался. Дайте файлик *.ocx?

  9. Александр

    Доброго времени суток Сергей, к моему сожалению не удаются отобразить "Мои документы"при помощи CLSID Dump. Создал строку PinToNameSpaceTree, попробывал поменять значение Attributes на 20000004. Но все безуспешно, подскажите в что я мог не увидеть!

  10. Александр

    @Александр

    В папке ShellFolder сейчас содержится (по умолчанию)/без значения/; Attributes /значение 20000004/; CallForAttributes /значение 20040/; HideOnDesktopPerUser; PinToNameSpaceTree; QueryForOverlay; WantsFORDISPLAY /данную строку удалял но результата не добился/. так же прописана под папка HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\{450D8FBA-AD25-11D0-98A8-0800361B1103}

  11. Владимир

    Статья очень полезная, огромное спасибо!

    Но вот вопрос как такое проделать на Win 8, тут некоторых параметров вообще нету, о которых Вы пишите.

  12. Сергей Ткаченко

    @Владимир
    каких, например?

    Давайте разбираться с конкретными примерами.

  13. Влад

    А есть ли способ менять их местами в панели навигации?

  14. Сергей Ткаченко

    @Влад
    Есть.

    HKEY_CLASSES_ROOT\CLSID\{Индентификатор нужного элемента}\

    SortOrderIndex, тип DWORD, в десятичной системе задаете порядок отображаемых элементов

Написать комментарий