Добавление программ в контекстное меню

Бесплатная программа FileMenu Tools добавлять пункты в контекстное меню Проводника, а также удаляет из контекстного меню некоторые пункты.

Несуществующий раздел реестра

А вы знаете, что мы внесли изменения в несуществующий раздел реестра? Раздел 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 не получится (например, те, которые сопоставлены с определенными типами файлов самой операционной системой).

  1. Откройте редактор реестра. Самый простой способ для этого — нажать клавиши Win+R на клавиатуре (Win — клавиша с эмблемой ОС), ввести regedit и нажать Enter.
  2. В редакторе реестра перейдите к разделу (папки слева) HKEY_CURRENT_USER\ SOFTWARE\ Microsoft\ Windows\ CurrentVersion\ Explorer\ FileExts\ Расширение_файла\ OpenWithList 
  3. В правой части редактора реестра кликните по тому пункту, где поле «Значение» содержит путь к программе, которую нужно удалить из списка. Выберите «Удалить» и согласитесь с удалением. 

Обычно, пункт исчезает сразу. Если этого не произошло, перезагрузите ваш компьютер или перезапустите проводник Windows.

Примечание: если нужная программа не указана в приведенном выше разделе реестра, посмотрите, а нет ли её здесь: HKEY_CLASSES_ROOT\ Расширение_файла\ OpenWithList (в том числе в подразделах). Если её нет и там, то далее будет приведена дополнительная информация о том, как всё-таки можно удалить программу из списка.

Отключение пунктов меню «Открыть с помощью» в бесплатной программе OpenWithView

Одна из программ, позволяющих настроить пункты, отображающиеся в меню «Открыть с помощью» — бесплатная OpenWithView, доступная на официальном сайте www.nirsoft.net/utils/open_with_view.html (некоторые антивирусы не любят системный софт от nirsfot, но в каких-либо «плохих» вещах он замечен не был. На указанной странице также есть файл с русским языком для этой программы, его нужно сохранить в ту же папку, где находится OpenWithView).

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

Всё, что требуется для того, чтобы убрать программу из «Открыть с помощью» — нажать по ней и отключить с помощью красной кнопки в меню вверху, либо в контекстном меню.

Судя по отзывам, программа работает в Windows 7, но: когда я тестировал в Windows 10 мне не удалось убрать с её помощью Opera из контекстного меню, тем не менее, программа оказалась полезной:

  1. Если кликнуть дважды по ненужному пункту, отобразится информация о том, как он прописан в реестре.
  2. После этого можно выполнить поиск по реестру и удалить данные ключи. В моем случае это оказалось 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 (этот пункт, судя по всему, применим только к браузерам).

Кажется, это всё по поводу удаления пунктов. Перейдем к их добавлению.

Создание раскрывающегося меню с несколькими уровнями вложенности

Выше я продемонстрировал, как создать раскрывающееся меню со списком пунктов. Эти пункты тоже можно сделать раскрывающимися, т.е. возможно создание вложенных меню, как показано на рисунке ниже.

Как видите, в меню есть пункт «Диск», который в свою очередь раскрывает меню с утилитами для обслуживания диска. Он отделен от остальных пунктов разделителем, хотя это не очень хорошо видно на рисунке, поскольку пункт выделен. Дальше я расскажу, как создать такое меню на основе уже изложенного выше материала.

  1. В разделе реестра
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\Shell

    создайте ярлыки для двух новых пунктов (Дефрагментация диска и Очистка диска), следуя инструкциям в разделе статьи «Регистрация команд в реестре». Я назвал подразделы defrag и cleanmgr.

  2. В том же разделе реестра создайте подраздел disk-menu (название может быть любым). Дальше все будет очень похоже на то, что вы проходили в первом разделе статьи.
  3. В подразделе disk-menu создайте строковые параметры:
    • MUIVerb для названия меню, например, со значением Диск
    • Icon для значка меню, например со значением imageres.dll,31
    • SubCommands для ярлыков этого меню (в данном случае со значением defrag;cleanmgr)
  4. Если вы хотите использовать разделитель, создайте параметр 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.

Создание раскрывающегося меню и добавление в него пунктов

Теперь нужно в реестре создать меню и добавить в него пункты, которые будут служить для вызова команд.

  1. В зависимости от того, где вы хотите создать раскрывающееся меню, выберите раздел.
    • для меню «Компьютер» перейдите в раздел:
      HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell
    • для меню рабочего стола перейдите в раздел:
      HKEY_CLASSES_ROOT\DesktopBackground\Shell
  2. Щелкните правой кнопкой мыши по разделу shell и выберите пункт Создать – Новый раздел. Имя для раздела можно выбрать любое, но оно обязательно должно быть латинское. Назовите его, например, Menu1. В этом разделе будут созданы следующие строковые параметры.
  3. Параметр MUIVerb (обязательно) отвечает за название раскрывающегося меню, поэтому значение можете выбирать любое. Я назвал свое Система.
  4. Параметр 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, причем в теме по твикам реестра. Очевидно, автор вопроса видел решение в каком-то волшебном твике. В общем, он мыслил в правильном направлении – можно править реестр, и ниже вы увидите подтверждение того, что такое решение тоже работает.

Однако я предпочитаю простые и быстрые решения, поэтому предложил ему легкий способ, позволяющий компенсировать данное ограничение операционной системы, обходясь без правки реестра. Можно посылать файлы в нужную программу, используя существующий пункт контекстного меню «Отправить»!

Это делается очень просто.

  1. Создайте ярлык к программе, в которой вы хотите открывать файлы. Щелкните по исполняемому файлу правой кнопкой мыши и выберите в меню пункт Создать ярлык.
  2. В Пуск – Поиск введите shell:sendto (о командах shell я уже рассказывал). Откроется папка SendTo, содержащая несколько ярлыков.
  3. Скопируйте или переместите ярлык в эту папку.

Теперь выделите несколько файлов, щелкните правой кнопкой мыши и выберите ваш ярлык в меню Отправить. Файлы откроются в указанной программе.

Но не спешите создавать ярлыки папок – возможно, они уже есть в меню, просто скрыты по умолчанию.

Создание раздела «Shell»

Если ответвление «shell» отсутствует, то его необходимо создать. Создание любого раздела осуществляется просто – нужно сделать правый клик по объекту, в состав которого необходимо включить новый элемент, и запустить соответствующую команду. Если пользуетесь системным редактором реестра, то она находится в подменю строки «Создать».

Сразу же появится новый элемент древа, который нужно переименовать. То есть, ввести вручную или вставить скопированное из другого места наименование.

Эта пара операций универсальна, то есть принцип действий остается неизменным – меняются только имена объектов. Так что в дальнейшем иллюстраций к ней прилагаться не будет. Если забудете, как это делается, всегда можно вернуться к данной части текста.

Обзор

Для работы раскрывающегося меню нужны две составляющих:

  • команды, которые выполняются при щелчке по пункту меню
  • меню, раскрывающее список пунктов

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

  1. Единожды зарегистрировав команду, ее можно вызывать из любого меню, если их несколько.
  2. Управление пунктами меню значительно упрощается.

Следуя простым пошаговым инструкциям, через 10 минут вы создадите собственное раскрывающееся меню, которое показано на рисунке ниже.

В конце статьи вы также найдете готовые наборы раскрывающихся меню.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделитесь с друзьями:
Технарь
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.