Контекстное меню

Контекстное меню с клавиатурыКонтекстное меню – один из специфических элементов графического интерфейса пользователя, который являет собой список команд, реализующих определённые стандартные или специфические действия для активного в данный момент элемента (так называемый контекст). В Windows такое меню существует практически для любого объекта: файл, папка, рабочая область. Традиционно контекстное меню отсутствует только у пунктов основного меню и кнопок на панелях инструментов большинства программ.

Вызывают контекстное меню обычно нажатием правой кнопки мыши на нужном элементе. Вторым универсальным способом вызова является нажатие на клавиатуре комбинации клавиш SHIFT+F10. На большинстве клавиатур для ПК также существует специальная кнопка (обычно в нижнем ряду между правым Alt и CTRL), а в некоторых программах контекстное меню можно вызвать длительным удержанием левой кнопки мыши на нужном объекте (аналогичный способ присутствует также в Android).

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

Настройка меню правого клика

Контекстное меню Настройка меню правого клика
Язык:Русский
Формат:
Обновлено:2017-03-11
Автор:





Настройка меню правого клика

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

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

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

Структура контекстного меню

Контекстное меню Windows представляет собой появляющийся по нажатию правой кнопки мыши (либо специальной клавиши на клавиатуре или комбинации клавиш SHIFT+F10) список команд, которые можно применить к активному в данный момент элементу. С его помощью мы можем, например, быстро скопировать и вставить фрагмент текста, проверить файл на вирусы, изменить способ отображения содержимого папки или даже запустить нужную программу с требуемыми параметрами. Чтобы долго не расписывать всех возможных способов применения контекстного меню, предлагаю взглянуть на скриншот ниже:

Контекстное меню файла

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

  • меню рабочего стола (будет иметь команды для управления настройками внешнего вида рабочего стола и создания новых файлов);
  • меню папки (аналогично предыдущему, будет содержать настройки папки и функции создания файлов);
  • меню файла (наиболее обширное меню с общими командами, вроде, копирования/перемещения/удаления и применимыми к конкретному типу данных);
  • меню текстовых элементов (стандартные функции копирования/вставки и специфические, которые зависят от программы, в которой открыт текст);
  • меню прикладных программ (содержит команды, которые обычно находятся в системных меню программы).

В плане настройки и изменения мы будем рассматривать далее контекстные меню папок (в частности, рабочего стола) и файлов. Меню выделенных текстовых фрагментов и программ обычному пользователю без вмешательства в код отдельных приложений, как правило, изменить не получится. Но и возможность подогнать стандартные системные менюшки под свои нужды – это уже весьма немало!

Как и любое другое меню системы, контекстное меню имеет собственную структуру и иерархию. Структурно оно разбито на секции, ограниченные горизонтальными линиями-разделителями. В верхних пунктах обычно находятся самые востребованные стандартные действия (для файлов) или функции доступа к настройкам внешнего вида (для папок). Далее следует группа дополнительных команд, после которой, как правило, находятся команды, добавленные сторонними программами или пользователем. Завершает меню секция служебных функций и доступа к свойствам.

Структура контекстного меню

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


Контекстное меню в реестре

Для редактирования контекстного меню существует довольно много различных готовых инструментов. Однако, на мой взгляд, начать стоит именно с вопроса, где находится контекстное меню и можно ли его править без сторонних программ. Редактировать его, естественно, можно вручную. Для этого нам понадобиться лишь встроенный в Windows редактор реестра. Что же касается местонахождения меню, то здесь, увы, не всё так просто, поскольку единого централизированного раздела реестра, отвечающего за него нет. И, если команды для папок собраны ещё более или менее компактно, то наборы действий для файлов порядком разбросаны по реестру и "привязаны" к конкретным типам файлов.

Но начнём по порядку. Первым делом запустим редактор реестра. Проще всего это сделать через строку "Выполнить", которая вызывается комбинацией клавиш WIN+R. В открывшемся окошке в поле ввода прописываем команду "regedit" (без кавычек) и жмём Enter. При необходимости подтвердим запуск редактора от имени Администратора и можем начинать действовать:

Вызов редактора реестра

Все разделы контекстного меню, которые можно настроить, находятся в кусте реестра HKEY_CLASSES_ROOT, который обычно идёт первым. Пока ничего не трогаем, а просто смотрим :) Да, кстати, любые манипуляции с реестром могут привести к его неработоспособности, поэтому перед тем как начать с ним работать, настоятельно рекомендую сделать его резервную копию, которую можно будет при необходимости восстановить при помощи загрузочного диска. Для этого зайдём в меню "Файл", нажмём пункт "Экспорт", в открывшемся окне укажем диапазон экспорта "Весь реестр", а затем зададим имя нашему файлу бэкапа и выберем куда его сохранить:

Бэкап реестра

Проще всего в реестре найти пункты контекстного меню папок, поскольку их местонахождение стандартно во всех системах. За него отвечают ветки HKEY_CLASSES_ROOT\Directory\shell и HKEY_CLASSES_ROOT\Folder\shell. Для примера рассмотрим простейший стандартный пункт меню папки "Открыть". Для этого перейдём по пути HKEY_CLASSES_ROOT\Folder\shell\open\command:

Пункт Открыть в контекстном меню

Как видим, команда контекстного меню состоит из значения по умолчанию, которое обычно задаёт путь к файлу или идентификатору процесса, исполняющего её. В случае с пунктом "Открыть" идентификатор вынесен в отдельный строковый параметр "DelegateExecute". Если открыть его и скопировать значение, то мы можем найти (CTRL+F) путь к библиотеке, которая обрабатывает нужное нам событие. В нашем случае обрабатывающий идентификатор обнаружился по адресу HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{13709620-C279-11CE-A49E-444553540000} и обращался он к системной библиотеке "shell32.dll" (подраздел "InprocServer32"):

Идентификатор процесса в реестре

С контекстным меню файлов всё несколько сложнее. Как я уже говорил, многие пункты разбросаны по реестру и относятся только к определённому типу файлов. Эти типы в кусте HKEY_CLASSES_ROOT определяются ветками с названиями расширений (например, ".avi", ".zip", ".doc" и т.п.). Однако, есть и одна крупная ветвь, в которой находятся стандартные команды для всех файлов. Она носит название "*" и находится в самом начале:

Контекстное меню для всех файлов

Команды контекстного меню здесь отображаются в разделах "shell" и "shellex\ContextMenuHandlers". Практически все они добавлены сторонними программами и состоят только из идентификатора процесса, указывающего на исполняющую его библиотеку той или иной программы.

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

Меню Путь в реестре
Папка HKEY_CLASSES_ROOT\Directory\shell, HKEY_CLASSES_ROOT\Directory\background\shell и HKEY_CLASSES_ROOT\Folder\shell
Рабочий стол HKEY_CLASSES_ROOT\DesktopBackground\Shell
Значок и папка "Компьютер" HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell
Диск HKEY_CLASSES_ROOT\Drive\shell
Корзина HKEY_CLASSES_ROOT\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell
Все типы файлов HKEY_CLASSES_ROOT\*\shell и HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers
Файл конкретного типа (например, AVI) HKEY_CLASSES_ROOT\.avi\ShellEx и HKEY_CLASSES_ROOT\AVIFile\shellex
Некоторые системные наборы команд HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell

Кроме того, из теории не помешало бы знать о том, какие основные дополнительные параметры (кроме строкового "По умолчанию") используются для большей кастомизации пользовательских пунктов контекстного меню:

  1. DelegateExecute – уточняет идентификатор процесса, к которому следует обращаться указанному в параметре по умолчанию исполняемому файлу (используется также параметр "CanonicalName" или "ExplorerCommandHandler").
  2. Icon – ссылается на файл с иконкой, которую мы хотим присвоить пункту меню (можно ссылаться как на картинки в ICO-формате, так и на наборы иконок в DLL-библиотеках (например, C:\Windows\System32\shell32.dll) или даже на EXE-файлы).
  3. MUIVerb – задаёт видимое имя создаваемого пункта меню.
  4. Description – задаёт описание, которое может выводиться при наведении на пункт меню.
  5. Extended – указывает, что данный пункт меню будет видим только в расширенном виде (вызов меню с зажатой клавишей SHIFT).
  6. Position – позволяет разместить пункт меню сверху (значение "Top") или снизу ("Bottom") от стандартных команд (работает не везде).
  7. SubCommands – добавляет дополнительные команды для формирования раскрывающихся менюшек.
  8. CommandFlags – позволяет добавить разделитель над (значение типа dword "00000020") или под (значение "00000040") создаваемым пунктом меню (доступно, увы, только для подменю).

Думаю, теории достаточно. Поэтому перейдём к практике.

Добавление и удаление пунктов меню

Ломать, как говорится, не строить :) Поэтому в качестве первого практического примера рассмотрим удаление ненужного нам пункта контекстного меню. У меня в меню папок откуда-то взялась команда "cmd", которая при попытке выполнить её выдаёт ошибку (видимо, результат каких-то моих предыдущих экспериментов :)).

Лишний пункт контекстного меню

Поскольку она не отображается в контекстном меню файлов, а видима только в папках, то её поиск сводится к проверке всего двух веток реестра: HKEY_CLASSES_ROOT\Directory\ и HKEY_CLASSES_ROOT\Folder\. Искомый раздел с нужным именем и пустой командой обнаружился по адресу HKEY_CLASSES_ROOT\Directory\background\shell\cmd\command. И теперь всё, что нам нужно сделать, – удалить раздел "cmd" вместе с подразделом "command":

Удаление пункта контекстного меню

Удалить, как видите, дело нехитрое :) Попробуем же что-нибудь создать. Например, в Windows 8 нет меню "Пуск" и довольно неудобно вызывать некоторые часто нужные служебные программы и оснастки. Поэтому предлагаю добавить в меню папки вместо бесполезной удалённой выше команды "cmd" функцию вызова, к примеру, Панели управления (запускается командой "control.exe").

Для этого вернёмся в раздел HKEY_CLASSES_ROOT\Directory\background\shell и создадим (контекстное меню раздела "shell" – "Создать" – "Раздел") в нём новый раздел "ContPanel" (назвать на самом деле можно как угодно). Чтобы в меню отображалось нормальное русскоязычное название нового пункта создадим в нём строковый параметр с именем "MUIVerb" и значением "Панель управления".

Новосозданный пункт уже появился в контекстном меню, но он пока не выполняет никаких действий. Для прикрепления к нему нужной функции в разделе "ContPanel" создадим подраздел "command" и изменим его значение "По умолчанию" на "control.exe" (без кавычек). Всё :) Только что мы создали собственный функциональный пункт контекстного меню:

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

Чтобы немного выделить его можно добавить парочку дополнительных параметров. Например, снабдить пункт иконкой и вынести его в начало или конец списка. Для добавления иконки создадим строковый параметр "Icon" и укажем в нём стандартную иконку Панели управления (находится в библиотеке "imageres.dll" под номером 22, соответственно, значение параметра будет – imageres.dll,22). Переместить же наш пункт мы можем в верхнюю или нижнюю секцию меню. Предлагаю переместить вверх, создав ещё один строковый параметр "Position" и задав для него значение "Top":

Приукрашенный пункт контекстного меню

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

Раскрывающиеся меню

Добавить единичный пункт в контекстное меню, как мы могли убедиться, не так уж и сложно. Однако, можно пойти дальше и создать целый собственный раздел с различными полезными командами, который будет открываться по требованию и не захламлять визуально общее меню. Причём, такое раскрывающееся меню можно делать при желании многоуровневым и пихать туда всё, что Вам заблагорассудится :) Если Вы заинтригованы такой возможностью, то, чтобы не тянуть, начнём.

Раз мы уже начали "мучить" контекстное меню папок, продолжим "издевательства" над ним же, превратив наш добавленный пункт запуска Панели управления в полноценный раздел быстрого доступа к различным системным оснасткам. Поэтому можем сразу использовать наш раздел "ContPanel", изменив его название, например, на "MyMenu", а параметр "MUIVerb" на "Наши инструменты". Также нам потребуется добавить сюда обязательный строковый параметр "subcommands" без значения.

Имеющийся подраздел "command" удалим или переименуем в "shell" (очистив значение "По умолчанию"). То есть, теперь наш раздел будет содержать не команду, а дополнительное меню. В этом меню создадим новый раздел с желаемым именем. Например, поместим туда уже используемый ранее раздел вызова Панели управления "ContPanel" с подразделом "command" (см. предыдущий раздел) без каких либо изменений. Получим такую конструкцию:

Выпадающее контекстное меню

Собственно, меню уже готово. Остаётся добавить в него несколько дополнительных пунктов со своими командами и можно пользоваться. Например, добавим сюда вызов Диспетчера задач (иконка и исполняемый файл – "taskmgr.exe") и тот же Редактор реестра ("regedit.exe"). Получится примерно так:

Выпадающее контекстное меню с несколькими пунктами

Аналогичным способом можно добавить в меню дополнительные уровни вложения. Для этого будет достаточно создать ещё один раздел с параметром "subcommands" и собственным вложенным подменю "shell". Кстати, в подменю мы можем использовать разделители, о которых говорилось выше (DWORD-параметр "CommandFlags" со значением "20" (разделитель выше) или "40" (разделитель под пунктом меню)). Чтобы отсортировать же наши пункты меню в нужной последовательности достаточно ввести в начало их имён числовые или буквенные индексы:

Многоуровневое контекстное меню

Редакторы контекстного меню

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

Для очистки пунктов контекстного меню можно воспользоваться, например, средствами популярной программы для очистки системы CCleaner. В своём арсенале она имеет раздел "Сервис", в котором содержится инструмент "Автозагрузка". Третья вкладка здесь носит название "Контекстное меню" и предоставляет удобный доступ к меню папок, файлов и дисков. Причём сразу удалять пункты необязательно, можно их просто выключить и они не будут отображаться, но могут быть активированы в любой момент!

Правка контекстного меню в CCleaner

Неплохими редакторами контекстных меню с возможностью удаления лишнего являются утилиты NirSoft ShellExView и ShellMenuView. Первая из них позволяет удалять команды для директорий и дисков, а вторая для файлов (в том числе и конкретных их типов):

Правка контекстного меню в ShellExView и ShellMenuView

Если же Вам нужно быстро добавить в контекстное меню различные полезные функции, то лучше всего с этим справится небольшая программка Easy Context Menu. В этой программе всё сводится к выбору понравившихся Вам новых функций, которые можно активировать в том или ином типе контекстного меню. Для того чтобы удалить добавленные команды, достаточно снять с них галочки, ну а продвинутые пользователи смогут добавлять и свои функции через встроенный "Редактор списка команд":

Добавление пунктов контекстного меню в Easy Context Menu

На нашем сайте Вы также можете найти довольно старенькую, но ещё рабочую программулину под названием Fast Explorer 2008. Её, пожалуй, единственную можно отнести к универсальным редакторам контекстного меню. Она позволяет добавлять статические пункты и полноценные многоуровневые подменю, но в то же время предоставляет и доступ к некоторым уже имеющимся разделам для их удаления или правки в визуальном режиме:

Fast Explorer 2008

Существуют и другие программы для редактирования контекстного меню, однако, далеко не все из них бесплатны и работают так, как нужно. Если Вы знаете достойные редакторы, о которых не было упоминаний в статье, обязательно напишите их названия (и, желательно, ссылки на официальный сайт) в комментариях.

Выводы

Редактирование контекстного меню – занятие не слишком сложное, но оно может научить Вас базовым приёмам работы с реестром, который кроет в себе уйму интересных и полезных возможностей. Кстати, если захотите сделать многоуровневое меню, то его можно реализовать не только описанным в статье способом, но и альтернативным, который требует регистрации команд на уровне системы, но даёт более гибкие и удобные возможности настройки.

Надеюсь, наша статья позволит Вам понять принципы управления контекстным меню и Вы сможете сделать свою повседневную работу за компьютером ещё более продуктивной!

P.S. Разрешается свободно копировать и цитировать данную статью при условии указания открытой активной ссылки на источник и сохранения авторства Руслана Тертышного.







Полезный совет:



Система проверки ошибок от Mistakes.ru