Мужайся, читатель - тебя ждет технический псто, долгий и унылый. Из него ты узнаешь, как выглядит Панель управления изнутри, какие элементы в неё входят, научишься размещать их в других папках, добавлять скрытые во имя светлого будущего элементы, такие как "Сетевые подключения", на их законное место, и много другое. Я поделюсь с тобой утилитой CSLID Dump, которая покажет список доступных виртуальных папок и ActiveX-приложений, расскажет об их локализованных именах, CLSID-ах, и даже даст их попробовать.
Дочитавшему до конца - покажу фотку котёнка.
Папка Панель управления не является папкой как таковой, в привычном значении термина, обычно применяемого к файловой системе. На деле это ActiveX-объект, создающий виртуальную папку со значками для открытия большинства стандартных конфигурационных диалогов и утилит операционной системы. Microsoft Windows, начиная с Windows 95, поддерживали и поддерживают два вида элементов, отображаемых в этой виртуальной папке: CPL-апплеты и ActiveX-объекты.
Аборигены Панели управления - CPL-апплеты
Впервые они в составе панели управления появились в Windows 95, в которой подавляющее большинство апплетов были именно CPL-апплеты. CPL-апплетом обычно является файл с расширением *.cpl, который по сути своей является обычным DLL файлом со специально описанными функциями, позволяющими операционной системе вызывать функционал апплета. Как правило, это диалог настройки чего-либо, каких-то системных параметров. Этот механизм часто используется сторонними разработчиками, например, известный производитель электроники Realtek Semiconductors реализовывал настройку встраиваемых аудиокарт AC 97 именно апплетом cpl, и это далеко не единственный пример. Их физическое расположение нигде строго не регламентировано, но большинство CPL-апплетов находятся в каталоге%systemroot%\system32. Вот их типичный список для Windows 7 Home Basic:
Программы и компоненты: C:\Windows\System32\appwiz.cpl
Параметры Bluetooth: C:\Windows\System32\bthprops.cpl
Соседние пользователи: C:\Windows\System32\collab.cpl
Параметры оформления: C:\Windows\System32\desk.cpl
Брандмауэр: C:\Windows\System32\Firewall.cpl
Установка оборудования: C:\Windows\System32\hdwwiz.cpl
Свойства обозревателя: C:\Windows\System32\inetcpl.cpl
Windows Cardspace: C:\Windows\System32\infocardcpl.cpl
Язык и региональные стандарты: C:\Windows\System32\intl.cpl
Инфракрасные устройства: C:\Windows\System32\irprops.cpl
Джойстик: C:\Windows\System32\joy.cpl
Мышь и клавиатура: C:\Windows\System32\main.cpl
Звуки: C:\Windows\System32\mmsys.cpl
Сетевые подключения: C:\Windows\System32\ncpa.cpl
Параметры электропитания: C:\Windows\System32\powercfg.cpl
Свойства системы: C:\Windows\System32\sysdm.cpl
Параметры планшетного ПК: C:\Windows\System32\TabletPC.cpl
Телефон и модем: C:\Windows\System32\telephon.cpl
Время и дата: C:\Windows\System32\timedate.cpl
Интерфейс центра обновления: C:\Windows\System32\wscui.cpl
Распознавание речи: C:\Windows\System32\Speech\SpeechUX\sapi.cpl
Любой из этих апплетов откроется, если ввести его имя в диалог "Выполнить", например, напечатав timedate.cpl.
ActiveX - элементы: быстрее, удобней, современней
Панель управления современных версий Windows в основной массе своей состоит из элементов ActiveX. Элемент ActiveX- специальный контрол-библиотека, регистрируемая в системе и позволяющая использовать её свойства и методы в других приложениях. В случае с Панелью управления возможности ActiveX-элементов во многом превосходят CPL-апплеты: удобная локализация, контекстное меню, масса возможностей по отображению не только в Панели управления, но и в других папках, как правило, также виртуальных - этого всего CPL-апплеты лишены "из коробки". Механизм реализации Панели управления на ActiveX-элементах - довольно удачное решение, надо отдать должное разработчикам.
Перечень всех ActiveX элементов, доступных в Windows 7, легко получить, проследовав в реестр, в раздел HKEY_CLASSES_ROOT\CLSID. Все ActiveX - апплеты Панели управления перечислены в подразделах-идентификаторах класса (CLSID). Определить потенциальную возможность присутствия ActiveX в Панели управления достаточно легко - у CLSID должен присутствовать подраздел ShellFolder. Вот, например, так выглядит CLSID, идентифицирующий "Учётные записи пользователей":
Говоря о присутствии ActiveX-апплетов в Панели Управления, я неслучайно употребил "потенциальная возможность". Далеко не все апплеты представлены в Панели. Например, нашумевший в свое время "GodMode" и банальный апплет "Сетевые подключения" там отсутствуют. Состав того, что отображается в Панели управления, определяется ключом
[code]HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel\NameSpace[/code]
Его подразделы представляют собой как раз список ActiveX-апплетов. Вы можете добавлять сюда системные апплеты, по умолчанию не отображаемые в Панели. От вас требуется знание необходимого CLSID.
Но и это ещё не всё. Некоторые ActiveX-апплеты так отконфигурированы так (тот же GodMode, например), что даже если вы добавите его в NameSpace, в Панели управления отображаться не будет. Подробнее об этом - на MSDN, и об этом я расскажу ниже.
Путешествие по дебрям системного реестра - занятие весьма унылое, поиск нужного CLSID - тем более. Поэтому я только что набросал на коленке утилиту CSLID Dump, позволяющую получить список всех ActiveX-апплетов.
Прошу строго не судить, она кривая и одноразовая. Она позволяет:
- Выполнить конкретный ActiveX, дабы посмотреть, что он делает.
- Экспортировать список CLSID в HTML файл.
- Скопировать выделенный CLSID в буфер обмена Windows
- Создать на помеченные флажками CLSID ярлыки и поместить их в выбранную папку, например, на рабочий стол. Таким образом можно создать собственную папку-панель управления, о чем я писал выше.
Воспользуемся утилитой для получения CLSID элемента "Сетевые подключения" и добавим его в Панель управления , раз уж я о нем упомянул.
- Запускаем CLSID Dump, находим нужный элемент.
- В реестре, в ключе
[code]HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel\NameSpace[/code]
создайте подраздел с соответствующим идентификатором CLSID, он равен {7007ACC7-3202-11D1-AAD2-00805FC1270E}. - Время открыть панель управления.
Как формируется содержимое Панели управления
Итак, мы выяснили, что для отображения ActiveX-эелементов в Панели управления нужно как минимум присутсвие GUID-а элемента в ключе
[code]HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel\NameSpace[/code]
Касательно CPL-апплетов, дело обстоит чуть иначе и прозрачней: по умолчанию в Панель управления попадают все CPL-апплеты, находящиеся в папке \Windows\System32. Кроме этого, существуют определенные механизмы, позволяющие:
- отображать апплеты, находящиеся в каких-либо других папках;
- позволяющие скрывать CPL-апплет в Панели управления.
Оба представляют собой специальные ключи реестра.
Так, чтобы отключить загрузку CPL-апплета в Панели управления (скрыть апплет), необходимо имя его файла прописать в разделе
[code]HKEY_CURRENT_USER\Control Panel\don't load[/code]
либо в разделе
[code]HKEY_LOCAL_MACHINE \Software\Microsoft\Windows\CurrentVersion\Control Panel\don't load[/code]
В любом из разделов достаточно создать параметр строкового типа с именем, соответствующим имени файла апплета.
Очевидно, что HKEY_CURRENT_USER-раздел влияет только на текущего пользователя, в то время как прописанный в HKEY_LOCAL_MACHINE разделе апплет становится невидим всем пользователям компьютера.
Отображение CPL-файла, не находящегося в System32, – задача не намного сложнее. Достаточно прописать путь к CPL файлу в разделе реестра
[code]HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Cpls[/code]
Записи в нем представляют собой строковые параметры, в качестве имени которых выступают названия апплетов, а в качестве значений – полные пути к CPL файлам:
Категории Панели управления
Одним новшеств, которое принесла с собой любимая пользователями Windows XP, была Панель управления, разбитая на категории. Это несколько смущало привыкшего к классическому списку пользователя, но давало несомненный выигрыш в скорости работы самой Панели. Особо актуальна категорированная Панель управления в 6-ой версии Windows NT (Vista/7), где обилие апплетов способно поразить любого видавшего виды оператора ПК.
Категория, в которой будет размещаться сторонний CPL-апплет, задаётся в реестре в разделе
[code]HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Extended Properties\{305CA226-D286-468e-B848-2B2E8E697B74} 2[/code]
Здесь должен присутствовать создать параметр DWORD, название которого соответствует пути к файлу апплета, а значение —цифре из этого списка:
- 0x00000001 - Оформление и персонализация
- 0x00000002 - Оборудование и звук
- 0x00000003 - Сеть и Интернет
- 0x00000004 - Более не используется. Все апплеты с такой категорией отображаются в «Оборудование и звук»
- 0x00000005 - Система и ее безопасность (Система и обслуживание в Vista)
- 0x00000006 - Часы, язык и регион
- 0x00000007 - Специальные возможности
- 0x00000008 - Программы
- 0x00000009 - Учетные записи пользователей и семейная безопасность
- 0x0000000a - Безопасность (в Windows 7 не используется. Элементы отображаются в категории Система и ее обслуживание)
- 0x0000000b - В Vista - Мобильные ПК (отображается только на переносных компьютерах) , в Windows 7 не используется вообще.
- 0xFFFFFFFF - Не отображать данный апплет
Если для апплета описанным выше способом категория не задана, то он отображается в окне по ссылке «Все элементы Панели управления» (в Vista она называется «Дополнительные параметры»).
Пример. Нештатный апплет от аудиокарты Realtek отображается в категории «Оборудование и звук»:
Несколько слов о штатных апплетах Панели управления. Системные CPL-апплеты разносятся по категориям по тому же принципу, что и сторонние, но принадлежность к категории для них задается в разделе
[code]HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Extended Properties\System.ControlPanel.Category[/code]
Что касается ActiveX-апплетов, механизм их распределения по категориям несколько иной. Принадлежность к категории для них указывается прямо в разделе GUID-описания ActiveX, строковым параметром System.ControlPanel.Category. Его значение – это одна или несколько цифр, разделенных запятой, каждая из которых олицетворяет собой отдельную категорию Панели управления. Если цифр несколько, то апплет показывается сразу в нескольких категориях. Вот эти цифры:
0 - Без категории (Все элементы Панели управления)
1 - Оформление и персонализация
2 - Оборудование и звук
3 - Сеть и Интернет
4 - Более не используется. Все апплеты с такой категорией отображаются в «Оборудование и звук»
5 - Система и ее безопасность (Система и обслуживание в Vista)
6 - Часы, язык и регион
7 - Специальные возможности
8 - Программы
9 - Учетные записи пользователей и семейная безопасность
10 - Безопасность (в Windows 7 не используется. Элементы отображаются в категории Система и ее обслуживание)
11 - В Vista - Мобильные ПК (отображается только на переносных компьютерах) , в Windows 7 не используется вообще.
Давайте посмотрим на примере апплета «Электропитание», как это работает. Его GUID-описание находится в разделе
[code]HKEY_CLASSES_ROOT\CLSID\{025A5937-A6BE-4686-A844-36FE4BEC8B6D}[/code]
Значение параметра System.ControlPanel.Category в Windows Vista, в которой я готовлю сейчас эту статью, равно «2,5,11», значит, апплет доступен из категорий Оборудование и звук, Система и ее безопасность и Мобильные ПК. В этом легко убедиться:
Панель управления и Безопасный режим (Safe mode)
В безопасном режиме в Панели управления отображаются далеко не все апплеты. Как и в обычном режиме работы, механизм формирования списка CPL- и ActiveX-апплетов весьма схож, но контролируется разным ветками реестра. Какие CPL-апплеты должны показываться, определяется параметрами раздела реестра
[code]HKEY_LOCAL_MACHINE\Software\Microsoft\Windows \CurrentVersion\Control Panel\ExtendedProperties\System.ControlPanel.EnableInSafeMode[/code]
Здесь имя каждого из параметров представляет собой путь к CPL-файлу, а значение – это значние типа DWORD из следующего списка:
- 0x00000001 - Апплет отображается только в «обычном» Safe Mode.
- 0x00000002 - Апплет отображается в Безопасном режиме с поддержкой сети.
- 0x00000003 - Апплет всегда отображается, какой бы режим Safe Mode не был выбран при запуске системы.
Что касается ActiveX-апплетов, то видимостью в Безопасном режиме управляет DWORD-параметр System.ControlPanel.EnableInSafeMode в разделе GUID-описания с теми же возможными значениями. Опять-таки, вот пример с апплетом «Электропитание»:
Как несложно догадаться, этот апплет отображается в любом из «Безопасных» режимов.
Отображение ActiveX-апплетов вне Панели упавления
Помимо непосредственно Панели управления, ActiveX-апплеты могут быть добавлены в любую другую виртуальную папку ("Мой компьютер", к примеру) по принципу присутствия подраздела CLSID в соотвствуеющем NameSpace:
- Создав подраздел {7007ACC7-3202-11D1-AAD2-00805FC1270E} в ключе
[code]HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace[/code]
вы добавите "Сетевые подключения" непосредственно на Рабочий стол.
- Создав подраздел {7007ACC7-3202-11D1-AAD2-00805FC1270E} в ключе
[code]HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace[/code]
вы добавите "Сетевые подключения" в Компьютер.
- Создав подраздел {7007ACC7-3202-11D1-AAD2-00805FC1270E} в ключе
[code]HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\NetworkNeighborhood\NameSpace[/code]
вы добавите "Сетевые подключения" в папку Сеть.
- Создав подраздел {7007ACC7-3202-11D1-AAD2-00805FC1270E} в ключе
[code]HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\PrintersAndFaxes\NameSpace[/code]
вы добавите "Сетевые подключения" в папку Принтеры.
Я полагаю, принцип и суть вам ясны? Отмечу, особняком здесь стоит панель навигации Проводника (область слева). Разговор о ней займет ещё одну статью такого же размера (я опубликую её в ближайшее время).
Внимание! Никогда не удаляйте \NameSpace\ подразделы, созданные не вами! Вы испортите операционную систему, удаленные апплеты перестанут открываться.
Создание ярлыков на элементы Панели управления
Проводник умеет запускать так называемые Shell:-объекты. Набрав в диалоге "Выполнить" shell:Desktop, вы открете рабочий стол. Desktop, как вы наверное уже догадались, это friendly name объекта ActiveX. Если известен CLSID объекта, можно заставить Проводник его выполнить вот такой командой:
[code]Explorer.exe shell:::{CLSID}[/code]
Например, командна, которая откроет апплет "Параметры папки":
[code]Explorer.exe shell:::{6DFD7C5C-2451-11d3-A299-00C04F8EF6AF}[/code]
Вот ещё пара интересных ярлыков:
Свернуть все окна:
[code]C:\Windows\explorer.exe shell:::{3080F90D-D7AD-11D9-BD98-0000947B0257}[/code]
Переключение между окнами:
[code]C:\Windows\explorer.exe shell:::{3080F90E-D7AD-11D9-BD98-0000947B0257}[/code]
Таким образом, вы можете создать ярлыки на практически любой апплет Панели управления. Можно поместить ярлыка на часто используемые апплеты на рабочий стол или в какую-либо другую папку, дабы иметь их всегда под рукой. Я создал ярлык на Сетевые подключения, так как я часто пользуюсь этим апплетом. Я считаю создания ярлыков более предпочитательным способом, и более прозрачным, чем внедрение апплетов в NameSpace.
Для быстрого создания нужных вам ярлыков вы можете снова воспользоваться программой CLSID Dump, поставив флажки на нужные вам ActiveX-апплеты и нажав кнопку Shortcut в программе. Ярлыки создаются они в папке, которую вы сами укажете.
На этом - всё. Надеюсь, статья была вам интересна и пролила каплю света на то, как работает главный инструмент настройки операционных систем Microsoft Windows.
💡Узнавайте о новых статьях быстрее. Подпишитесь на наши каналы в Telegram и Twitter.
«технический псто» — видимо, пост…
и в опере голосовалка не работает…
За статью спасибо! Интересно, почитал — убил время))
Браво Коллега! Отличный материал, но видимо хомячкам будет не по зубам.
Те, кому это не нужно, или, как ты выразился, «не по зубам», просто не будут читать. Всем не угодить.
@Roman
Роман, а какая у вас версия opera?
У меня последняя «чистая» версия Opera со включенными скриптами и плагинами без расширений работает без проблем.
Работу проделали великолепную.
@myr4ik07 , спасибо на добром слове
К автору. С помощью вашей чудной программы CLSID Dump можно найти все Active X элементы и добавить их либо в Панель, либо в Свою папку…
А вот как найти все .cpl элементы? С помощью поиска, согласитесь, мутарно, причём не всегда эффективно, особенно, если не всё проиндексировано.
Моя задача найти их и добавить к остальным Active X (всем). Чтобы ничего не было скрыто.
Ваши рекомендации?
Павел, cpl-апплеты — это же всего пара ключей в реестра.
Вы без поиска их можете проверить/найти «на глаз».
Как я их на глаз найду? Вы же сами писали, что CPL могут быть не только в папке system32//
Я хочу добавить все CPL уже к списку Active X, но с тем условием, что не будет совпадений имён, потому что есть CPL и Active X с одинаковым значением. (указывающие на один путь). А меня интересуют только CPL, которые не входят в состав Active X (например «Время и Дата» (timedate.cpl) и подобные им.
Они зарегистрированы/прописаны в разделах
HKEY_LOCAL_MACHINE \Software\Microsoft\Windows\CurrentVersion\Control Panel\Cpls
и
HKEY_CURRENT_USER \Software\Microsoft\Windows\CurrentVersion\Control Panel\Cpls
Об этом я тоже писал.
@Сергей Ткаченко
Набрался мужества, прочёл. Что-то нашёл. Сделал. Вопрос: а как изменить тип и цвет шрифта в Панели управления, Свойствах системы и др. вкладках панели, отредактировать их? Это всё о семёрке.
Насколько мне известно, это всё задается настройками темы оформления Windows. Оформить отдельно панель управления нельзя.
Спасибо, здорово!
Подскажите, как грамотно построить раскрывающееся меню с отдельными элементами ПУ в контекстном меню. Я не прошу развёрнутый лист, просто боюсь напороть с синтаксисом — как\где писать. Например:
[HKEY_CLASSES_ROOT\DesktopBackground\Shell\CP]
«MUIVerb»=»Control Panel»
«SubCommands»=»??;??»
«icon»=»»
Теперь в CommandStore уже лазить незачем, а как SubCommands они работать будут?
Или это иначе пишется? Могли бы вы привести один какой-нибудь пример — Programs & features \ Device manager \ Брандмауэр.. любой.
CLSID Dump не работает в Windows 8 🙁
Это как-то можно вылечить?
(параметры совместимости проверял — бесполезно)
Выкиньте её. Вот вам The full list of shell commands in Windows 8 и The most comprehensive list of shell locations in Windows 8. Всё за моим авторством и моим корявым английским.
Прекрасная и познавательная статья! Огромное спасибо автору. Доходчиво и вразумительно для такого дилетанта, как я. Автор показал СУТЬ всего, а не «кнопки», на которые надо «бездумно» нажимать. Прекрасный материал!!!
Спасибо на добром слове
Отличный материал!
Рад слышать, что вам понравилось
Спасибо. Люблю такие заметки.
Спасибо за статью, но так и не понял, почему CSLID Dump не работает под управлением Windows 8.1, x64. Пробовал запускать и в режиме совместимости с Windows 7.
Надеюсь, что мне придёт на почту уведомление, если автор ответит на мой комментарий.
Насчёт почты не уверен, отпишусь руками, мне несложно.
А не работает, потому что в той версии, что я выложил в паблик, есть проблемы. Много проблем.
Я их исправил, но не вижу большого смысла поддерживать программу/релизить новую версию.
Она мало кому нужна.
Ну так есть версия, которая будет работать под Windows 8.1, x64? 🙂 Мне нужна.
вернусь из отпуска- отправлю
Прошу прощение за беспокойство, а можно ли мне тоже получить версию для Windows 8.1 x64.
Могли бы Вы, пожалуйста, выложить новую версию CLSID Dump, которая работает в Windows 8.1 Upd 1/ Windows 10 TP x64, т.к. использование вашей программы позволяет сэкономить немного времени при поиске необходимого ActiveX-объекта.
Я чёт никак ни бинарников, ни исходников не найду.
Простите! Я стараюсь их отыскать.
Ничего, ради такого дела можно и подождать.
Пока ждал выпуска Вашей программы в нете нашел 2 похожие на Вашу, одну на сайте Нира Софера(автора известного приложения nircmd), а вторую среди Autohotkey скриптов.
Но они проигрывают Вашей программе, так как:
1) Они показывают полный список всех CLSID (например, у меня в Windows 8.1 их 6883 штуки)
2) Не отображают локализованные названия объектов в системе.
3) И имхо, на кнопке лучше написать Open in Regedit вместо Open Regedit — так будет логичнее (ведь мы не просто редактор реестра отрываем, а указанный CLSID в нем).
Поддерживаю.
Там ещё и код хреновый, так как я не планировал тиражировать этот софт 🙂
Предполагаю, что данный софт смогут по настоящему оценить лишь те, кому он действительно нужен (например, добавляют некоторые аплеты в Проводник и т.п.) и кто попытался найти замену.
По крайней мере радует одно, версия для Windows 8.1 Upt 1 скорее всего будет нормально работать и в Windows 10 TP.
###
Исходя из статьи, я понимаю, программа фильтрует CLSID из общего числа по наличию в реестре подраздела ShellFolder?
Да
Надеюсь Вам удалось найти исходники.
Успехов в разработке новой версии!
Загляну через некоторое время, в надежде на результат, а то пользоваться таблицей-списком немного неудобно.
Не запускается на Windows 10 TP 9841 64Bit
Пишет
Unhandled exception has occurred in your application. If you click Continue, the application will ignore this error and attempt to continue. If you click Quit, the application will close immediately.
Customized cultures cannot be passed by LCID, only
Внизу есть расширенный log — я так понимаю не хватает какого-то компонента Net Framework?
Не-а, просто программа не совместима с поздними версиями Windows
Симантик нашел в проге Trojan.Win32.Siggen.dchkjt (пояснения будут?)
Ложное срабатывание симантека.
Так и не смог скрыть аплеты из Пуск —> Панель управления —> Где копать?
Если это ActiveX апплеты, то их нужно скрывать SFGAO -флагами, чего я делать не советую, это приводит к нестабильной работе Проводника
Добрый день. Уважаемый автор статьи развивайте свою программу CLSID Dump. Она очень полезная вещь. Для работы на серверах windows просто не заменимая.
Я планирую её функционал поместить в новый Твикер