В продолжение предыдущей статьи, как я и обещал, мы поговорим о добавлении, удалении и скрытии ActiveX элементов в панели навигации Проводника. Ценность данного материала заключается в иллюстрации того, как работает панель навигации Проводника - по какому принципу она формируется, и какие параметры ActiveX элементов позволяют и запрещают их отображение в различных виртуальных папках системы. Без этого мой предыдущий пост был бы неполным.
С практической же точки зрения я лично не вижу никакого смысла корпеть над реестром, когда на всё, что угодно, можно разместить ярлыков в папку "Избранное". Ожидающего увидеть в материале восторженные возгласы от появления в панели навигации %s и получить адреналин от "хака венды", я разочарую - пост технический. Поэтому дочитавшему до конца покажу котика.
Теория
В панели навигации Проводника отображаются только те элементы, что находятся в пространстве имен Рабочего стола. В реестре это выглядит как перечень ActiveX компонентов, указанных в виде подразделов ключа (вы это знаете из предыдущей публикации):
[code]HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\Desktop\NameSpace[/code]
По умолчанию в этом пространстве имён содержатся:
- библиотеки;
- папка поиска;
- панель управления;
- общие папки;
- папка «Документы»;
- личная папка текущего пользователя;
- корзина;
- оффлайн файлы;
- объект «Устройства и принтеры»;
- ряд служебных ActiveX, например, поиск по RSS-фидам или MAPI папка.
Необходимым, но недостаточным условием присутствия в панели навигации Проводника ActiveX-объекта, принадлежащего к пространству имен Рабочего стола, является наличие пустого строкового параметра PinToNameSpaceTree в подразделе ShellFolder соответствующего раздела HKEY_CLASSES_ROOT\CLSID\"GUID".
Например, GUID папки «Мой компьютер» - {20D04FE0-3AEA-1069-A2D8-08002B30309D}. В подразделе
[code]HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\ShellFolder[/code]присутствует пустой строковый параметр PinToNameSpaceTree, а сам GUID присутствует в пространстве имен рабочего стола:
[code]HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\Desktop\NameSpace\{20D04FE0-3AEA-1069-A2D8-08002B30309D}[/code]
Я неспроста указал, что одного лишь параметра 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 в разделе
[code]HKEY_CLASSES_ROOT\CLSID\{ED7BA470-8E54-465E-825C-99712043E01C}[/code]
Он имеет пресловутый параметрWantsParseDisplayName в подразделе HKEY_CLASSES_ROOT\CLSID\{ED7BA470-8E54-465E-825C-99712043E01C}\ShellFolder, да и к тому же снабжен вот таким вот набором флагов:0x20100004.
Это суммарное значение, состоящее из следующих флагов:
[code]SFGAO_CANLINK (0x00000004)+ SFGAO_NONENUMERATED (0x00100000)+ SFGAO_FOLDER (0x20000000)[/code]
Что тут к чему:
SFGAO_CANLINK – на объект можно создать ярлык.
SFGAO_NONENUMERATED – скрыть объект из перечисления, т.е. нигде не отображать.
SFGAO_FOLDER – объект является [псевдо]папкой.
Ключевое здесь - SFGAO_NONENUMERATED. Именно этот флаг не позволит отображаться ActiveX элементу «Все задачи» в панели навигации Проводника или в Панели Управления.
Чтобы разблокировать этот элемент, необходимо:
- сбросить флаг SFGAO_NONENUMERATED , приведя значение параметра Attributes к виду 0x20000004,
- удалить параметр WantsParseDisplayName,
- создать подраздел [code]HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel\NameSpace\{ED7BA470-8E54-465E-825C-99712043E01C}[/code]
После этого апплет «Все задачи» становится доступным прямо из Панели управления.
![]()
Полученные знания позволяет вам управлять составом навигационной панели. Несколько практических примеров для иллюстрации материала на практике, приведенные ниже, освещают несколько пару аспектов добавления новых элементов.
Скроем в навигационной панели элемент «Компьютер», для чего откроем его подраздел в редакторе реестра, используя CLSID Dump:
![]()
Давайте сразу перейдем к разделу ShellFolder. Здесь мы видим ожидаемый параметр PinToNameSpaceTree. Вот он:
![]()
Именно этот параметр указывает, отображаться ли ActiveX элементу в панели навигации Проводника, или нет. Удаляем параметр PinToNameSpaceTree у элемента «Компьютер», тем самым спрятав его в панели навигации. По шагам:
- Получите полные права на раздел реестра
[code]HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\ShellFolder[/code] - Удалите параметр PinToNameSpaceTree.
- Перезапустите Проводник.
Компьютер пропал из навигационной панели:
![]()
Как несложно догадаться, сделать это можно добавлением строкового параметра PinToNameSpaceTree в ShellFolder-подраздел ActiveX объекта, присутствующего в пространстве имён Рабочего стола. В качестве примера разберем добавление Корзины.
- Найдите в CLSID Dump соответствующий подраздел ActiveX-объекта «Корзина» и откройте его в реестре.

- Получите полные права на подраздел
[code]HKEY_CLASSES_ROOT\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\ShellFolder[/code] - Создайте строковый параметр PinToNameSpaceTree с пустым значением.
- Перезапустите Проводник.

В качестве примера мы добавим пресловутый GodMode, папку «Все задачи».
- Сначала следует удалить параметр WantsParseDisplayName и выставить значение Attributes равным 0x20000004 в разделе
[code]HKEY_CLASSES_ROOT\CLSID\{ED7BA470-8E54-465E-825C-99712043E01C}\ShellFolder[/code]
Тем самым мы разблокируем ActiveX для визуализации. - Затем создайте пустой параметр PinToNameSpaceTree в разделе:
[code]HKEY_CLASSES_ROOT\CLSID\{ED7BA470-8E54-465E-825C-99712043E01C}\ShellFolder[/code]
В итоге по первому и второму пункту у нас получится вот так:

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

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

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

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

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

Отлично! спасибо… только учусь правильно взаимодействовать с реестром и ваша статья очень помогла!
Имеется один вопрос: а возможно-ли добавить абсолютно любой свой каталог на панель навигации(не в избранное, а как самостоятельный объект). Они ведь не имеют GUID-ов.
Можно.
Нужно GUID сгенерировать новый и уникальный, можно вот этим: http://www.guidgenerator.com/online-guid-generator.aspx
Затем описать ваш каталог в CLASSES примерно так
HKEY_CLASSES_ROOT\CLSID\{GUID}\shell\open\command@="explorer.exe ваш_путь"
И затем добавить, как написано в статье.
0_о… Благодарю, Сергей Ткаченко. Очень полезная информация. А никаких последствий от этого не будет, например в случае удаления данной папки, прописанной вручную?
Она просто открываться перестанет с панели навигации. Других последствий не будет
Спасибо.
Сергей, помогите пожалуйста зарегистрировать в win7 64 ActiveX.
Для работы нужно.
http://forum.ixbt.com/topic.cgi?id=22:84858#4
Не сталкивался. Дайте файлик *.ocx?
Доброго времени суток Сергей, к моему сожалению не удаются отобразить «Мои документы»при помощи CLSID Dump. Создал строку PinToNameSpaceTree, попробывал поменять значение Attributes на 20000004. Но все безуспешно, подскажите в что я мог не увидеть!
@Александр
В папке ShellFolder сейчас содержится: (по умолчанию)/без значения/; Attributes /значение 20000004/; CallForAttributes /значение 20040/; HideOnDesktopPerUser; PinToNameSpaceTree; QueryForOverlay; WantsFORDISPLAY /данную строку удалял но результата не добился/. так же прописана под папка: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\{450D8FBA-AD25-11D0-98A8-0800361B1103}
Статья очень полезная, огромное спасибо!
Но вот вопрос: как такое проделать на Win 8, тут некоторых параметров вообще нету, о которых Вы пишите.
каких, например?
Давайте разбираться с конкретными примерами.
А есть ли способ менять их местами в панели навигации?
Есть.
HKEY_CLASSES_ROOT\CLSID\{Индентификатор нужного элемента}\
SortOrderIndex, тип DWORD, в десятичной системе задаете порядок отображаемых элементов