Несуществующий раздел реестра
А вы знаете, что мы внесли изменения в несуществующий раздел реестра? Раздел HKEY_CLASSES_ROOT (HKCR) интересен тем, что он отсутствует физически. Под его видом в редакторе реестра отображаются совмещенные разделы:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes HKEY_CURRENT_USER\SOFTWARE\Classes
В HKLM хранятся глобальные параметры для всех пользователей, а в HKCU – параметры текущего пользователя, при этом HKCU преобладает над HKLM. Поэтому разные пользователи могут сопоставлять различные программы одному типу файла. Это дает возможность каждому из них слушать музыку в любимом проигрывателе и путешествовать по Интернету в привычном браузере.
Разработчики Windows позиционируют раздел HKCR для чтения, нежели для записи. Это не значит, что записывать туда данные неправильно. Когда вы вносите изменения в раздел HKCR, они записываются в HKEY_LOCAL_MACHINE\SOFTWARE\Classes. Это легко проверить – удалите созданный раздел Editor из HKLM, и он пропадет из HKCR.
Через пару дней я покажу, как разными способами создать в контекстном меню аналогичный пункт для открытия файла в программе с правами администратора. Я также рассмотрю вопрос одновременного открытия нескольких файлов в программах, использующих вкладки для их отображения.
А у вас текстовый редактор интегрирован в контекстное меню? Какой редактор вы предпочитаете и почему?
Как удалить пункты из раздела «Открыть с помощью»
Если вам требуется удалить какую-либо программу из пункта контекстного меню «Открыть с помощью», сделать это можно в редакторе реестра Windows или с помощью сторонних программ.
К сожалению, некоторые пункты удалить данным способом в Windows 10 — 7 не получится (например, те, которые сопоставлены с определенными типами файлов самой операционной системой).
- Откройте редактор реестра. Самый простой способ для этого — нажать клавиши Win+R на клавиатуре (Win — клавиша с эмблемой ОС), ввести regedit и нажать Enter.
- В редакторе реестра перейдите к разделу (папки слева) HKEY_CURRENT_USER\ SOFTWARE\ Microsoft\ Windows\ CurrentVersion\ Explorer\ FileExts\ Расширение_файла\ OpenWithList
- В правой части редактора реестра кликните по тому пункту, где поле «Значение» содержит путь к программе, которую нужно удалить из списка. Выберите «Удалить» и согласитесь с удалением.
Обычно, пункт исчезает сразу. Если этого не произошло, перезагрузите ваш компьютер или перезапустите проводник Windows.
Примечание: если нужная программа не указана в приведенном выше разделе реестра, посмотрите, а нет ли её здесь: HKEY_CLASSES_ROOT\ Расширение_файла\ OpenWithList (в том числе в подразделах). Если её нет и там, то далее будет приведена дополнительная информация о том, как всё-таки можно удалить программу из списка.
Отключение пунктов меню «Открыть с помощью» в бесплатной программе OpenWithView
Одна из программ, позволяющих настроить пункты, отображающиеся в меню «Открыть с помощью» — бесплатная OpenWithView, доступная на официальном сайте www.nirsoft.net/utils/open_with_view.html (некоторые антивирусы не любят системный софт от nirsfot, но в каких-либо «плохих» вещах он замечен не был. На указанной странице также есть файл с русским языком для этой программы, его нужно сохранить в ту же папку, где находится OpenWithView).
После запуска программы вы увидите список пунктов, которые могут отображаться в контекстном меню для различных типов файлов.
Всё, что требуется для того, чтобы убрать программу из «Открыть с помощью» — нажать по ней и отключить с помощью красной кнопки в меню вверху, либо в контекстном меню.
Судя по отзывам, программа работает в Windows 7, но: когда я тестировал в Windows 10 мне не удалось убрать с её помощью Opera из контекстного меню, тем не менее, программа оказалась полезной:
- Если кликнуть дважды по ненужному пункту, отобразится информация о том, как он прописан в реестре.
- После этого можно выполнить поиск по реестру и удалить данные ключи. В моем случае это оказалось 4 различных расположения, после очистки которых избавиться от Opera для HTML файлов все-таки удалось.
Пример расположений реестра из пункта 2, удаление которых может помочь убрать ненужный пункт из «Открыть с помощью» (аналогичные могут быть и для других программ):
- HKEY_CURRENT_USER\ SOFTWARE\ Classes\ Название программы\ Shell\ Open (удалял весь раздел «Open»).
- HKEY_LOCAL_MACHINE\ SOFTWARE\ Classes\ Applications\ Название программы\ Shell\ Open
- HKEY_LOCAL_MACHINE\ SOFTWARE\ Classes\ Название программы\ Shell\ Open
- HKEY_LOCAL_MACHINE\ SOFTWARE\ Clients\ StartMenuInternet\ Название программы\ Shell\ Open (этот пункт, судя по всему, применим только к браузерам).
Кажется, это всё по поводу удаления пунктов. Перейдем к их добавлению.
Создание раскрывающегося меню с несколькими уровнями вложенности
Выше я продемонстрировал, как создать раскрывающееся меню со списком пунктов. Эти пункты тоже можно сделать раскрывающимися, т.е. возможно создание вложенных меню, как показано на рисунке ниже.
Как видите, в меню есть пункт «Диск», который в свою очередь раскрывает меню с утилитами для обслуживания диска. Он отделен от остальных пунктов разделителем, хотя это не очень хорошо видно на рисунке, поскольку пункт выделен. Дальше я расскажу, как создать такое меню на основе уже изложенного выше материала.
- В разделе реестра
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\Shell
создайте ярлыки для двух новых пунктов (Дефрагментация диска и Очистка диска), следуя инструкциям в разделе статьи «Регистрация команд в реестре». Я назвал подразделы defrag и cleanmgr.
- В том же разделе реестра создайте подраздел disk-menu (название может быть любым). Дальше все будет очень похоже на то, что вы проходили в первом разделе статьи.
- В подразделе disk-menu создайте строковые параметры:
- MUIVerb для названия меню, например, со значением Диск
- Icon для значка меню, например со значением imageres.dll,31
- SubCommands для ярлыков этого меню (в данном случае со значением defrag;cleanmgr)
- Если вы хотите использовать разделитель, создайте параметр REG_DWORD с именем CommandFlags и шестнадцатеричным значением:
- 20 для размещения разделителя над пунктом меню
- 40 для размещения разделителя под пунктом меню
Я задал значение 40, поскольку планирую сделать меню первым пунктом и отделить его от остальных.
В реестре должна получиться такая картина:
Вложенное меню готово, и осталось лишь указать на него ссылку в родительском меню, как было описано в разделе статьи «Создание раскрывающегося меню и добавление в него пунктов». Следуя моему примеру, в разделе
HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Menu1
параметр SubCommands должен принять следующий вид:
disk-menu;regedit;taskmgr;devmgmt
Таким образом, раскрывающееся меню будет содержать вложенное меню disk-menu (Диск) первым пунктом, а также три отдельных пункта: Редактор реестра, Диспетчер задач и Диспетчер устройств.
Если вы запутались или у вас что-то не получается, удалите созданные разделы и параметры, а затем импортируйте приведенный ниже REG-файл.
Windows Registry Editor Version 5.00 "MUIVerb"="Система" "SubCommands"="disk-menu;regedit;taskmgr;devmgr" "Icon"="imageres.dll,104" "Position"="Bottom" @="Редактор реестра" "Icon"="regedit.exe" @="regedit.exe" @="Диспетчер задач" "Icon"="taskmgr.exe" @="taskmgr.exe" @="Диспетчер устройств" "Icon"="devmgr.dll,4" @=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\ 00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,6d,00,6d,00,\ 63,00,2e,00,65,00,78,00,65,00,20,00,2f,00,73,00,20,00,25,00,53,00,79,00,73,\ 00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,00,5c,00,73,00,79,00,73,00,\ 74,00,65,00,6d,00,33,00,32,00,5c,00,64,00,65,00,76,00,6d,00,67,00,6d,00,74,\ 00,2e,00,6d,00,73,00,63,00,00,00 @="Очистка диска" "Icon"="cleanmgr.exe" @="cleanmgr.exe" @="Дефрагментация диска" "Icon"="dfrgui.exe" @="dfrgui.exe" "MUIVerb"="Диск" "Icon"="imageres.dll,31" "CommandFlags"=dword:00000040 "SubCommands"="defrag;cleanmgr"
Более глубокий уровень вложенности достигается аналогичным образом. В параметре SubCommands для вложенного меню указывается ссылка на команду в разделе CommandStore, содержащую параметры следующего уровня вложенности.
Отключить контекстное меню панели задач в редакторе реестра
Перед редактированием реестра рекомендуется создать точку для восстановления системы.
1. Откройте редактор реестра: в строке поиска или в меню выполнить (выполнить вызывается клавишами Win+R) введите команду regedit и нажмите клавишу Enter.
2. Чтобы отключить контекстное меню панели задач всем пользователям этого компьютера — перейдите по пути HKEY_LOCAL_MACHINE \SOFTWARE \Microsoft \Windows \CurrentVersion \Policies \Explorer => нажмите на раздел Explorer правой клавишей мыши и выберите «Создать» => Параметр DWORD (32 бита) => назовите новый параметр NoTrayContextMenu
Откройте созданный параметр, в поле «Значение» введите 1 и нажмите «ОК».
Чтобы отключить контекстное меню панели задач пользователю под которым вы вошли в систему — перейдите по пути HKEY_CURRENT_USER\ Software\ Microsoft\ Windows\ CurrentVersion\ Policies\ Explorer => нажмите на раздел Explorer правой клавишей мыши и выберите «Создать» => Параметр DWORD (32 бита) => назовите новый параметр NoTrayContextMenu => откройте созданный параметр, в поле «Значение» введите 1 и нажмите «ОК».
Чтобы отключить контекстное меню панели задач конкретному пользователю — откройте раздел HKEY_LOCAL_MACHINE \SOFTWARE \Microsoft \Windows NT \CurrentVersion \ProfileList. Когда вы откроете раздел ProfileList (нажав на стрелку рядом), в нём каждый раздел будет означать какого-то пользователя, нажмите на любой раздел и в правой колонке в параметре ProfileImagePath увидите путь к профилю.
В разделе ProfileList выбирайте по очереди каждый раздел, ищите в параметре ProfileImagePath пользователя, которому нужно отключить контекстное меню. Когда найдете — запомните или перепишите себе куда-то название раздела S -1 — ….;
В левой боковой панели откройте HKEY_USERS, выберите раздел запомненный выше (S-1-….)
Откройте в нём Software\ Microsoft\ Windows\ CurrentVersion\ Policies\ Explorer => нажмите на раздел Explorer правой клавишей мыши и выберите «Создать» => Параметр DWORD (32 бита) => назовите новый параметр NoTrayContextMenu => откройте созданный параметр, в поле «Значение» введите 1 и нажмите «ОК».
3. Перезагрузите компьютер или перезапустите проводник, чтобы изменения вступили в силу.
В дальнейшем, если вы захотите вернуть доступ к контекстному меню — нужно удалить созданный параметр NoTrayContextMenu.
Создание раскрывающегося меню и добавление в него пунктов
Теперь нужно в реестре создать меню и добавить в него пункты, которые будут служить для вызова команд.
- В зависимости от того, где вы хотите создать раскрывающееся меню, выберите раздел.
- для меню «Компьютер» перейдите в раздел:
HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell - для меню рабочего стола перейдите в раздел:
HKEY_CLASSES_ROOT\DesktopBackground\Shell
- для меню «Компьютер» перейдите в раздел:
- Щелкните правой кнопкой мыши по разделу shell и выберите пункт Создать – Новый раздел. Имя для раздела можно выбрать любое, но оно обязательно должно быть латинское. Назовите его, например, Menu1. В этом разделе будут созданы следующие строковые параметры.
- Параметр MUIVerb (обязательно) отвечает за название раскрывающегося меню, поэтому значение можете выбирать любое. Я назвал свое Система.
- Параметр SubCommands (обязательно) содержит список указателей для команд, которые будут выполняться из меню. Названия указателей должны соответствовать названиям подразделов реестра, которые вы создали на шаге 2 в предыдущем разделе статьи. Разделяйте указатели точкой с запятой (;) и перечисляйте их в том порядке, в котором вы хотите видеть пункты в меню. Чтобы вам было проще понять, я приведу свой список:
regedit;taskmgr;devmgmt
Таким образом, у меня в меню будут редактор реестра, диспетчер задач и диспетчер устройств.
Параметр Icon (необязательно) задает значок для раскрывающегося меню. Можно задать путь к библиотеке (dll) и номер ресурса (значка), либо полный путь к исполняемому файлу (если он в системной папке, достаточно указать только имя). Для своего меню «Система» я задал значок imageres.dll,104 (сначала начала имя файла, а через запятую – номер ресурса).
Параметр Position (необязательно) отвечает за расположение раскрывающегося меню в контекстном меню. Вы можете задать ему значение Top (вверху) или Bottom (внизу). Если значение не задавать, раскрывающееся меню окажется в середине контекстного меню. Я расположил свое меню внизу.
Параметр Extended (необязательно) отвечает за отображение пункта в меню. Когда параметр присутствует, чтобы увидеть созданный пункт, нужно вызывать контекстное меню, удерживая нажатой клавишей SHIFT. Этому параметру не требуются значения.
Если вы хотите создать два меню, создайте раздел Menu2 и повторите шаги 3 – 7. Таких меню можно сделать сколько угодно.
Давайте посмотрим, что получилось в реестре.
Кстати, уже все готово! В контекстном меню компьютера появилось раскрывающееся меню «Система» со списком пунктов.
Если вы запутались или у вас что-то не получается, удалите созданные разделы и параметры, а затем импортируйте приведенный ниже REG-файл (он добавляет раскрывающееся меню в контекстное меню компьютера).
Windows Registry Editor Version 5.00 "MUIVerb"="Система" "SubCommands"="regedit;taskmgr;devmgr" "Icon"="imageres.dll,104" "Position"="Bottom" @="Редактор реестра" "Icon"="regedit.exe" @="regedit.exe" @="Диспетчер задач" "Icon"="taskmgr.exe" @="taskmgr.exe" @="Диспетчер устройств" "Icon"="devmgr.dll,4" @=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\ 00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,6d,00,6d,00,\ 63,00,2e,00,65,00,78,00,65,00,20,00,2f,00,73,00,20,00,25,00,53,00,79,00,73,\ 00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,00,5c,00,73,00,79,00,73,00,\ 74,00,65,00,6d,00,33,00,32,00,5c,00,64,00,65,00,76,00,6d,00,67,00,6d,00,74,\ 00,2e,00,6d,00,73,00,63,00,00,00
Теперь вы можете увидеть, какая структура должна быть в реестре.
Как добавить свой пункт в контекстное меню
В разделе «Действия» выберите пункт «Добавить команду». В окне FileMenu Tools появится новый пункт «Новая команда». Далее нужно будет нажать на кнопку «Свойства», которая расположена в левой части она программы.
В разделе Общие кликните по пункту «Текст меню», а затем введите название своего пункта контекстного меню вместо «Новая команда».
Далее в разделе «Свойства программы» выделите пункт «Программа». В поле напротив этого пункта, вставьте путь к к файлу данной программы. При необходимости, здесь можно будет настроить и другие параметры.
После сделанного выбора, нажмите на кнопку «Применить изменения».
Как это делается
Все манипуляции производятся с системным реестром, поэтому нужен его редактор. Можно использовать системный «Regedit», однако, если не лень «пошерстить» интернет-ресурсы, то лучше скачать портативную утилиту «Registry Workshop». Искать нужно русифицированную сборку (repack), так как в оригинальном виде она идет только на английском, да еще за нее и деньги требуют.Итак, запускаем «Regedit» или «Registry Workshop» и разворачиваем самую верхнюю ветвь в дереве реестра – «HKEY_CLASSES_ROOT» на панели переходов (слева).
![]()
Прокручивая список разделов, находим пункт «Directory», который управляет такими объектами как «Директория». В принципе, это то же самое, что и «Папка» (Folder), но по какой-то причине разработчики разделили управление папками на 2 отдельных элемента реестра.В его составе имеется пункт «Background», который переводится как «Задний план» или «Фон», а по сути, означает пустое пространство, не занятое никакими иконками или эскизами.
Далее, переходим к ответвлению «shell». Имя данного объекта говорит само за себя – «оболочка» (так переводится слово) в данном случае является синонимом слова «Проводник Windows» и все команды, которые в нем находятся, отображаются в контекстном меню пустого пространства окон директорий. А так как Рабочий стол тоже принадлежит к категории папок, то и в его контекст-меню они будут присутствовать.
Важно! Не перепутайте с одноименным элементом в составе родительского объекта «Directory». Нам нужен элемент «shell» именно в составе «Background»
Если вдруг, по какой-либо причине его не существует, необходимо таковой создать.
Меню «Открыть с помощью» для нескольких файлов
Иногда требуется открыть сразу несколько файлов в программе, отличной от той, что используется для этого типа файлов по умолчанию. Простейший пример — вы хотите воспроизвести несколько музыкальных композиций в другом проигрывателе.
Можно, конечно, открыть проигрыватель и перетащить в него файлы мышью. Но все-таки иногда меню будет удобнее. Например, это актуально для программ, группирующих окна на панели задач, либо при недостаточном навыке работы с тачпадом.
Именно такой вопрос был задан на форуме OSZone, причем в теме по твикам реестра. Очевидно, автор вопроса видел решение в каком-то волшебном твике. В общем, он мыслил в правильном направлении – можно править реестр, и ниже вы увидите подтверждение того, что такое решение тоже работает.
Однако я предпочитаю простые и быстрые решения, поэтому предложил ему легкий способ, позволяющий компенсировать данное ограничение операционной системы, обходясь без правки реестра. Можно посылать файлы в нужную программу, используя существующий пункт контекстного меню «Отправить»!
Это делается очень просто.
- Создайте ярлык к программе, в которой вы хотите открывать файлы. Щелкните по исполняемому файлу правой кнопкой мыши и выберите в меню пункт Создать ярлык.
- В Пуск – Поиск введите shell:sendto (о командах shell я уже рассказывал). Откроется папка SendTo, содержащая несколько ярлыков.
- Скопируйте или переместите ярлык в эту папку.
Теперь выделите несколько файлов, щелкните правой кнопкой мыши и выберите ваш ярлык в меню Отправить. Файлы откроются в указанной программе.
Но не спешите создавать ярлыки папок – возможно, они уже есть в меню, просто скрыты по умолчанию.
Создание раздела «Shell»
Если ответвление «shell» отсутствует, то его необходимо создать. Создание любого раздела осуществляется просто – нужно сделать правый клик по объекту, в состав которого необходимо включить новый элемент, и запустить соответствующую команду. Если пользуетесь системным редактором реестра, то она находится в подменю строки «Создать».
![]()
Сразу же появится новый элемент древа, который нужно переименовать. То есть, ввести вручную или вставить скопированное из другого места наименование.
![]()
Эта пара операций универсальна, то есть принцип действий остается неизменным – меняются только имена объектов. Так что в дальнейшем иллюстраций к ней прилагаться не будет. Если забудете, как это делается, всегда можно вернуться к данной части текста.
Обзор
Для работы раскрывающегося меню нужны две составляющих:
- команды, которые выполняются при щелчке по пункту меню
- меню, раскрывающее список пунктов
Сначала я расскажу, как зарегистрировать в реестре собственные команды. По сравнению со способом добавления отдельных пунктов меню, о котором я рассказывал здесь, такой подход имеет два преимущества:
- Единожды зарегистрировав команду, ее можно вызывать из любого меню, если их несколько.
- Управление пунктами меню значительно упрощается.
Следуя простым пошаговым инструкциям, через 10 минут вы создадите собственное раскрывающееся меню, которое показано на рисунке ниже.
![]()
В конце статьи вы также найдете готовые наборы раскрывающихся меню.
