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


Содержание

Как настроить системное меню формы Windows?

Я хочу добавить к моему приложению старый возраст. Я хочу добавить его в «системное меню» приложения (тот, который появляется, когда мы нажимаем значок приложения в верхнем левом углу). Итак, как я могу это сделать в .NET?

Windows упрощает получение дескриптора копии системного меню формы для целей настройки с помощью функции GetSystemMenu . Жесткая часть заключается в том, что вы сами можете выполнить соответствующие изменения в возвращаемом меню, используя такие функции, как AppendMenu , InsertMenu и DeleteMenu так же, как если бы вы вы программировали непосредственно против Win32 API.

Однако, если все, что вы хотите сделать, это добавить простой пункт меню, это действительно не так уж сложно. Например, вам нужно будет использовать только функцию AppendMenu , потому что все, что вы хотите сделать, это добавить элемент или два в конец меню. Выполнение чего-либо более продвинутого (например, вставка элемента в середине меню, отображение растрового изображения в элементе меню, отображение элементов меню, установка элемента меню по умолчанию и т.д.) Требует немного больше работы. Но как только вы знаете, как это сделать, вы можете пойти на дикую природу. документация по функциям, связанным с меню сообщает все.

Здесь полный код формы, который добавляет строку разделителя и элемент «О» в нижней части его системного меню (также называемое меню окна):

И вот как выглядит готовый продукт:

Значение-добавление довольно мало для количества пинвы, которое вам понадобится. Но это возможно. Используйте GetSystemMenu() для извлечения дескриптора системного меню. Затем InsertMenuItem добавит запись. Вы должны сделать это в переопределении OnHandleCreated(), чтобы воссоздать меню, когда окно будет воссоздано.

Добавить пункт к системному меню приложения

Системное меню вызывается по нажатию на иконку окна. Оно содержит такие команды как «Развернуть», «Восстановить», «Переместить» и т.д. Так вот, теперь у вас появилась возможность добавлять новые пункты к системному меню приложения и обрабатывать их нажатие! Для этого воспользуемся функцией AppendMenu(). В качестве параметров этой функции нужно указать:

  1. Дескриптор того меню, которое мы хотим изменять
  2. Флаг, контролирующий появление и поведение пункта меню. может принимать следующие значения:
    • MF_BITMAP Для использование изображение в качестве пункта меню. Тогда послежний параметр должен содержать дескриптор изображения.
    • MF_CHECKED Устанавливает контрольную метку возле пункта меню.
    • MF_DISABLED Показывает, что пункт меню будет неактивным. Его нельзя будет выделить и он приобретёт серое состояние.
    • MF_ENABLED Делает пункт меню активным.
    • MF_GRAYED Делает пункт меню недоступным.
    • MF_MENUBARBREAK Функция похожа на MF_MENUBREAK. Позволяет последующие пункты меню размещать в новой колонке, отделяемой от текущей вертикальной чертой.
    • MF_MENUBREAK Позволяет последующие пункты меню размещать в новой колонке, но не отделяет их вертикальной линией.
    • MF_OWNERDRAW Указывает, что пункт меню должен будет прорисовываться самостоятельно. До отображения меню в первый раз окно посылает сообщение WM_MEASUREITEM для того, чтобы узнать какой должна быть ширина меню. Так же посылает сообщение WM_DRAWITEM в тот момент, когда пункт меню должен обновляться.
    • MF_POPUP Характеризует меню, которое будет открывать подменю или контекстное меню. Тогда последний параметр должен содержать дескриптор этого пункта меню.
    • MF_SEPARATOR Отделительная горизонтальная линия. Линия не может становиться неактивной или активной. В данном случае последний параметр будет игнорироваться.
    • MF_STRING Показывает, что пункт меню будет содержать строку, которая должна быть указана в последнем параметре.
    • MF_UNCHECKED Снимает контрольную метку около пункта меню.
  3. Идентификатор нового пункта меню. Если значение флага MF_POPUP, тогда этот параметр должен содержать дескриптор контекстного меню.
  4. Содержание нового пункта меню. Так же зависит от значения флага. Если он содержит такие константа как MF_BITMAP, MF_OWNERDRAW или MF_STRING, тогда здесь нужно указывать: дескриптор изображения, собственную прорисовку пункта меню или строку.

Если функция выполняется успешно — она возвращает значение отличное от нуля, в противном случае — 0.

Давайте разберём пример:

Создайте новой приложение и по созданию окна [Событие OnCreate()] напишите такой код:

Здесь мы добавляем два новых пункта в системное меню приложения. Сначала разделительную горизонтальную линию, о чём свидетельствует значение флага MF_SEPARATOR, а затем, пункт меню, который будет содержать строку. Это видно по значению флага MF_STRING. Сама строка, как вы видите указывается в последнем пункте меню. Но это ещё не всё, так же нужно предусмотреть вариант, когда пользователь нажмёт на наш новый пункт меню. Нужно генерировать новое сообщение Windows и обрабатывать его. Для этого в частных объявлениях, т.е. в директиве private напишем такой код:

В разделе implementation напишем следующее:

Ну вот, вообщем-то и всё! Теперь компилируйте и тестируйте приложение.

Система меню Windows

Меню – набор объединенных по функциональному признаку пунктов, каждый их которых обозначает команду или подменю, которое можно открыть щелчком на пункте.

Если подменю имеется, то меню получается иерархическим (многоуровневым). Многоуровневые меню представляются на экране по-разному и в связи с этим делятся на горизонтальные (каскадные – открываются слева или справа) и вертикальные. Вертикальные меню в свою очередь подразделяются на ниспадающие и всплывающие.

При работе в Windows пользователю доступны меню четырех разновидностей:

  • Главное меню системы (или меню Пуск);
  • контекстное меню различных объектов;
  • строка меню окна;
  • системное меню окон.


Управление меню

Правила работы с меню и принятые в них обозначения идентичны.

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

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

Для выполнения команды меню достаточно щелкнуть левой кнопкой мыши или нажать клавишу на выделенной команде.

Чтобы отказаться от меню, не выбирая никакой команды, достаточно щелкнуть мышью где-нибудь вне области меню или нажать клавишу (или ).

Обозначения, принятые в меню

Для всех меню Windows принята унифицированная система обозначений:

  • Блеклый цвет в записи команды означает, что команда недоступна в данный момент (например, если не выделен объект для копирования, то команда Копировать недоступна).
  • Если команда заканчивается многоточием (. ), значит, при выборе этой команды откроется диалоговое окно с запросом параметров.
  • Помеченная галочкой ( ) команда обозначает действующий режим (флажок). Выбор команды отменяет режим. Повторный выбор – восстанавливает режим.
  • Стрелка ( ) после имени команды означает, что при выборе этой команды появится подменю.
  • Кружок ( ) означает выбор одного из альтернативных режимов, которые представлены в соседних командах («переключатель»).
  • Если возле имени команды указана клавиша или комбинацияклавиш, значит, данная команда может быть выполнена нажатием этих клавиш (их называют клавиши — акселераторы).

Главное меню

Главное меню – один из основных системных элементов управления Windows. При помощи Главного меню можно запустить все программы, установленные под управлением операционной системы или зарегистрированные в ней, открыть последние документы, с которыми выполнялась работа, получить доступ ко всем средствам настройки, а также к поисковой и справочной системам Windows. (Структуру Главного меню в стиле ХР см. в разделе Настройка Главного меню в стиле ХР, в классическом стиле – см. в [1, 2]). В классическом стиле Главного меню доступ к программ осуществляется с помощью пункта меню Программы, в стиле ХР – Все программы. Главное меню относится к иерархическим всплывающим каскадным меню.

Способы вызова Главного меню:

  • щелчок на кнопке Пуск в Панели задач;
  • нажатие клавиши – ;
  • сочетанием клавиш + .

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

Так называется меню, появляющееся после щелчка правой кнопкой мыши на объекте или элементе управления. Контекстным меню называется потому, что перечень пунктов в нем определяется типом объекта, на котором произошел щелчок, т.е. зависит от контекста.

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

Способы вызова контекстного меню:


  • щелчок правой кнопкой мыши на объекте или элементе управления;
  • нажатие клавиши – ;
  • сочетанием клавиш + .

Строка меню окна

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

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

Способы вызова строки меню

Кроме того, сделать активной строку меню можно с помощью клавиатуры, нажав одну из клавиш:

Системное меню

Кроме обычной строки меню, все окна Windows имеют так называемое системное меню. Команды системного меню предназначены для выполнения действий по управлению окном в частности с помощью клавиатуры

Способы вызова системного меню:

  • щелчок на системном значке, расположенном в левой части строки заголовка окна;
  • сочетанием клавиш + ;
  • контекстное меню строки заголовка.

Команды системного меню

Восстановить – соответствует кнопке восстановления размера.

Переместить – соответствует операции перетаскивания мышью. Команда доступна, если окно не максимизировано. При выборе этой команды в окне появляется перекрестная стрелка. Для перемещения окна следует нажимать клавиши управления курсором в нужном направлении или, нажав один раз клавишу-стрелку, просто переместить мышь. Закончить перемещение следует клавишей . Клавиша отменит перемещение и вернет окно на прежнее место экрана.

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

Свернуть – соответствует кнопке минимизации окна. Кнопка свернутого окна отображается в Панели задач.


Развернуть – соответствует кнопке максимизации окна. Разворачивает окно до максимального размера (на весь экран).

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

Copyright © 2008-2010
Ющик Е.В. All Rights Reserved

Использование Главного меню операционной системы Windows

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

Главное меню — необходимый элемент управления для завершения работы с операционной системой. В нем имеется пункт Завершение работы, использование которого необходимо для корректного завершения работы с системой перед выключением питания.

В структуру Главного меню входят два раздела: обязательный и произвольный. Произвольный раздел расположен выше разделительной черты. Пункты этого раздела пользователь может создавать по собственному желанию. Иногда эти пункты образуются автоматически при установке некоторых приложений. Структура обязательного раздела Главного меню представлена в таблице.

Пункт Главного меню Назначение Примечание
Программы Открывает доступ к иерархической структуре, содержащей указатели для запуска приложений, установленных на компьютере. Для удобства пользования указатели объединяются в категории. Если категория имеет значок в виде треугольной стрелки, в ней имеются вложенные категории. Раскрытие вложенных категорий выполняется простым зависанием указателя мыши Указатели, присутствующие в Главном меню, имеют статус ярлыков, а их категории — статус папок. Соответственно, указатели можно копировать и перемещать между категориями, перетаскивать на Рабочий стол и в окна папок. Это один из простейших способов создания ярлыка для недавно установленной программы. В Windows 95 такой возможности нет
Избранное Открывает доступ’ к некоторым логическим папкам пользователя, в которых он может размещать наиболее часто используемые документы, ярлыки Web-документов и Web-узлов Интернета Если с одним компьютером работают несколько пользователей, то каждый может иметь свою персональную группу избранных логических папок
Документы Открывает доступ к ярлыкам последних пятнадцати документов, с которыми данный пользователь работал на компьютере Физически эти ярлыки хранятся в скрытой папке C:WindowsRecent
Настройка Открывает доступ к основным средствам настройки Windows, в частности, к логической папке Панель управления. Служит также для доступа к папке Принтеры, через которую производится установка принтеров и настройка заданий на печать При активной работе с компьютером приходится настолько часто использовать обращение к папке Панель управления, что целесообразно создать для нее ярлык на Рабочем столе, однако перетаскиванием из Главного меню это сделать не удается. Для создания ярлыка используйте значок Панель управления в окне Мой компьютер
Найти Открывает доступ к средствам поиска, установленным на компьютере. Основным является средство Файлы и папки, с помощью которого производится поиск объектов в файловой структуре При установке приложений, имеющих свои собственные средства поиска, может происходить автоматическое размещение дополнительных ярлыков в этой категории
Справка Пункт входа в справочную систему Windows 98
Выполнить Этот пункт открывает небольшое окно, имеющее командную строку для запуска приложений Его удобно использовать для запуска приложений MS-DOS, а также в тех случаях, когда необходимо в строке запуска приложения указать параметры запуска
Завершение сеанса . Если операционной системой зарегистрировано несколько пользователей одного компьютера, этот пункт позволяет завершить работу одного пользователя и передать компьютер другому
Завершение работы Корректное средство завершения работы с операционной системой. Открывает диалоговое окно Завершение работы в Windows, содержащее следующие пункты: • приостановить работу компьютера; • выключить компьютер; • перезагрузить компьютер; • перезагрузить компьютер в режиме MS-DOS Если закрыты все окна процессов, завершить работу с Windows можно комбинацией клавиш ALT+F4. Пункт Приостановить работу компьютера переводит вычислительную систему в «ждущий режим». Если использовать пункт Перезагрузить компьютер при нажатой клавише SHIFT, происходит не полная перезагрузка, а только перезапуск операционной системы. Перезагрузку в режиме MS-DOS практикуют для запуска приложений MS-DOS, которые не удается запустить иными средствами

Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: Для студентов недели бывают четные, нечетные и зачетные. 9438 — | 7438 — или читать все.

Илон Маск рекомендует:  PAnsiChar - Тип Delphi

Добавляем новые возможности в контекстное меню Windows

Как создать уникальные элементы и настроить контекстные меню своих рабочих систем под конкретные потребности

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

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

Как известно, каждый раз, когда пользователь щелкает правой кнопкой мыши по определенному объекту в графическом интерфейсе операционной системы, открывается контекстное меню, включающее в себя список команд, которые конечный пользователь может выбрать для выполнения того или иного действия. Такие команды также известны как элементы контекстного меню, или же глаголы (Verbs). При взаимодействии с объектами вы можете обнаружить как стандартные элементы меню (к которым относятся, например, команды «Вырезать», «Вставить», «Удалить»), так и специальные команды, к которым пользователь получает доступ при взаимодействии с определенными типами файлов (например, для медиафайлов это могут быть команды, связанные с воспроизведением, а для текстовых файлов — команды печати либо редактирования содержимого файла). Ввиду того что все типы файлов регистрируются в системном реестре операционной системы, если вы попробуете вызвать меню для незарегистрированного типа файла (например, *.abc123), вам будут предоставлены лишь стандартные элементы меню.

Обратите внимание на то, что каждая команда в контекстном меню должна быть идентифицирована в системном реестре при помощи определенного глагола, который в свою очередь используется функцией ShellExecuteEx для запуска конкретного приложения. Этот глагол представляет собой обыкновенную текстовую строку, используемую оболочкой Shell для идентификации связанной команды. Каждый такой глагол соответствует команде, запускаемой в командной строке консоли или пакетному файлу с расширением bat.

Как и в случае с использованием командной строки, если какой-либо элемент для добавляемого вами объекта контекстного меню содержит пробелы, он должен быть заключен в кавычки. В противном случае, если элемент содержит пробел, но не заключен в кавычки, он будет обрабатываться неправильно. Например, если указать в качестве пути к приложению, скажем, «New Application.exe», приложение будет выполнено корректно. Но если вы укажете в качестве пути New Application.exe без кавычек, то операционная система попытается запустить несуществующую программу New с Application.exe в качестве первого параметра. А ввиду того что имя выполняющегося процесса может быть не самым информативным (вспомним в качестве примера файл «powershell.exe» и его отображаемое имя «Windows PowerShell»), выполнить такую задачу не удастся. Кстати, глаголы могут еще включать в себя имя, которое будет отображаться уже в самом контекстном меню, так что эти имена также следует указывать в кавычках.

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

Эта процедура по умолчанию, в сущности, выполняет две основные задачи:

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

Вернемся теперь к настройкам элементов контекстного меню и рассмотрим, где в реестре размещаются параметры, отвечающие за эти элементы. Вся информация, которую операционная система Windows использует при работе с файлами, заключена в ветви реестра HKEY_CLASSES_ROOT. Другими словами, если вы в «Проводнике Windows» открываете какой-то документ, в этот момент операционная система Windows запускает программу, которая при помощи процедуры по умолчанию связана с этим документом. Информация о тех функциях системы, о которых говорилось выше, включая расширения файлов, их взаимодействие с программами, печать, значки для зарегистрированных типов документов и многое другое, хранится в ветви HKEY_CLASSES_ROOT.


Беглое изучение разделов этой ветви реестра показывает, что здесь можно найти практически все возможные типы файлов. Огромное количество типов файлов регистрируется в операционной системе в процессе установки. К таким типам файлов можно отнести JPG, DOCX и другие. В свою очередь, некоторые специальные типы файлов появятся в системном реестре только после установки соответствующих приложений. К таким типам файлов можно отнести, например, VSDX после установки продукта Microsoft Office Visio.

В ветви реестра HKEY_CLASSES_ROOT для каждого зарегистрированного типа файлов отведено два специальных раздела. Имя первого такого раздела совпадает с расширением файла (например,. mkv) и содержит идентификатор (в данном случае — WMP11.AssocFile.MKV). А вот уже в разделе WMP11.AssocFile.MKV вы найдете дополнительную информацию о выбранном типе файлов. К такой информации можно отнести определение этого типа файлов, его значок, действия, которые должны выполняться при его использовании и многое другое. Все эти нюансы мы рассмотрим ниже.

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

  • *.Этот подраздел отвечает за все файлы, хранящиеся на компьютере, причем независимо от того, зарегистрирован выбранный тип файла или нет.
  • AllFileSystemObjects. В этом разделе реестра хранится информация, связанная со всеми файлами и папками. По сути, если вы хотите внести изменения в эту категорию, то лучше всего изменять параметры именно в данном разделе.
  • Folder. Изменив содержимое этого раздела, вы сможете управлять пунктами контекстного меню для выбранной в проводнике папки.
  • Directory. В данном случае изменениям подвергнутся все файлы, находящиеся внутри открытой пользователем папки.
  • Directory\Background. Изменив содержимое этого раздела, вы сможете добавить, изменить или удалить пункты контекстного меню для фоновой области папки «Проводника Windows» (когда вы вызываете контекстное меню внутри какой-то папки, при этом не выделяя ни одного файла).
  • DesktopBackground.Здесь нам предоставляется возможность изменить контекстное меню для рабочего стола операционной системы Windows.
  • Drive. Если вы внесете изменения в реестр для этого подраздела, то ваши действия повлекут за собой изменения, связанные с дисками в «Проводнике Windows».
  • Network. Внутри данного раздела вы можете вносить изменения в контекстное меню объектов, связанных с сетевым окружением.
  • Network\Type\#. Данные подразделы позволяют вам вносить изменения в объекты типа #, где «#» — это код типа сетевого провайдера, указанный в десятичном формате.
  • Printers. Здесь можно получить доступ к пунктам контекстного меню, связанного с принтерами.

Кроме того, можно выделить несколько канонических глаголов, которые вы найдете почти в каждом разделе Shell идентификатора типа файлов. К таким глаголам относятся:

  • Open.Элемент, отвечающий за открытие файла или папки.
  • Opennew.Открытие файла или папки в новом окне.
  • Print.Печать файла.
  • Explore. Открытие «Проводника Windows» для выбранной папки.
  • Find. Открытие диалогового окна системного поиска с папкой, заданной в качестве расположения поиска, установленного по умолчанию.
  • Openas. Отвечает за диалоговое окно «Открыть с помощью».
  • Properties. Открытие диалогового окна свойств выделенного объекта.

Создаем свой элемент контекстного меню

Итак, с теоретической частью мы закончили и теперь можем перейти к практическим шагам. Перед тем как создавать новые элементы контекстного меню, давайте разберем строение существующих. Для примера рассмотрим раздел «HKEY_CLASSES_ROOT\.gif», который отвечает за файлы типа gif. При выборе указанного раздела в качестве значения параметра по умолчанию, как уже говорилось выше, можно обнаружить идентификатор — «giffile». К этому разделу и следует перейти для изменения и добавления различных параметров.

Выбрав раздел «HKEY_CLASSES_ROOT\giffile», вы сразу обратите внимание на значение этого раздела по умолчанию: оно представляет собой описание выбранного вами типа файлов — «GIF Image». Это означает, что данный идентификатор отвечает за изображения типа GIF. Также в корневом разделе идентификаторов присутствуют дополнительные параметры. Рассмотрим некоторые из них.

  • EditFlags. Представляет собой двоичное значение длиной в 4 байт, которое может применяться для того, чтобы пользователи не могли при помощи контекстного меню задействовать определенные команды для выбранных ассоциаций файлов. В некоторых случаях этот параметр реестра может быть как типа REG_DWORD, так и REG_BINARY. Также стоит обратить внимание на то, что данный параметр может присутствовать и в подразделах shell, предопределяя наложенные ограничения корневого параметра.
  • FriendlyTypeName. В этот параметр реестра записывается отображаемое имя для идентификатора. Таким образом, значение данного параметра должно содержать те же данные, что и запись по умолчанию. Эта запись может представляться типом REG_SZ или REG_EXPAND_SZ, но она обязательно должна быть отформатирована как косвенная строка (это полное имя файла и значение ресурса, которым предшествует символ @), например @%SystemRoot%\System32\shell32.dll,-30595, как в данном случае.

Поскольку GIF является зарегистрированным типом файлов, в основном разделе идентификатора вы можете найти раздел «DefaultIcon», в котором существует параметр @, отвечающий за расположение ярлыка, который будет сопоставляться выбранному типу файла, в данном случае GIF. Как правило, за системные значки файлов отвечает библиотека imageres.dll и данный случай — не исключение.

Следующий раздел, Shell, имеет, пожалуй, основное значение для нас. А считается он важнейшим из разделов этой категории по той причине, что операционная система именно отсюда вытягивает сведения о том, какие действия должны выполняться при двойном щелчке на выбранном файле данного типа или же других возможных операциях. Как правило, этот раздел включает в себя несколько глаголов. К стандартным глаголам можно отнести такие глаголы, как edit, open и print, что в графическом интерфейсе пользователя эквивалентно командам контекстного меню «Изменить», «Открыть» и «Печать». Каждый такой глагол должен включать подраздел command, в котором в параметре по умолчанию необходимо добавить команду, запускаемую из командной строки и определяющую выполняемое действие.

Более того, наряду с приложением, указанным в кавычках, необходимо использовать такой параметр, как «%1», например, как показано на экране 1; при работе с файлами gif на данном компьютере должен открыться Microsoft Internet Explorer. Что же означает эта единица? При запуске браузера Internet Explorer параметр %1 будет заменяться именем выбранного файла. Иными словами, когда пользователь попробует открыть файл funnygif.gif, который находится на диске D, операционная система запустит программу C:\Program Files\Internet Explorer\iexplore.exe с файлом D:\funnygif.gif.

Экран 1. Значение команды «Открыть» для GIF-файлов

Если внимательно посмотреть на различные разделы для типов файлов, можно обнаружить, что помимо Shell, можно еще встретить такой раздел, как Shellex. А в чем разница между разделами Shell и Shellex? Здесь все просто. В случае с Shell вы можете применять статические глаголы, которые будут использоваться методом ShellExecute, а также контекстными меню для различных типов файлов. Как вы уже заметили, они достаточно просты в реализации, так как представляют собой, по сути, лишь определенную команду, выполняемую в командной строке. Однако в случае необходимости глаголы могут быть расширены дополнительными COM-объектами.

В свою очередь, раздел Shellex предназначен для управления расширениями shell, к которым как раз и относятся различные COM-объекты. Например, перейдя к разделу Drive, вы можете в разделе shellex найти такие подразделы как ContextMenuHandlers, Drag­DropHandlers, Folder­Extensions и PropertySheetHandlers, которые, собственно, и считаются расширениями для обычного раздела Shell.

Теперь перейдем непосредственно к созданию нового элемента контекстного меню. На примере я покажу, как можно добавить в контекстное меню папки пункт «Открыть Windows PowerShell здесь». Для того чтобы этот элемент был доступен при щелчке правой кнопкой мыши как по папке, так и по свободной фоновой области внутри папки, параметры реестра будут изменяться внутри уже существующих разделов Directory и Directory\Background. Обратите внимание, что в случае с изменением параметров внутри разделов Directory и Background вам необходимо сменить для этих разделов владельца и предоставить группе администраторов полные права на изменение содержимого внутри разделов PowerShell.

Это простой пример, поскольку контекстное меню папок уже обладает данным параметром, однако его можно вызвать только при помощи расширенного контекстного меню (в комбинации с нажатой клавишей Shift). За пункты из расширенного контекстного меню отвечает параметр «Extended», поэтому для решения данной задачи нам достаточно удалить текущий параметр из соответствующих разделов реестра, а все остальные параметры можно оставить без изменений. Содержимое файла reg будет выглядеть так, как показано в листинге 1.

Как мы видим на экране 2, теперь в контекстном меню появился соответствующий элемент.

Экран 2. Новый элемент контекстного меню


Возьмем другой пример, предполагающий добавление новых разделов и параметров реестра — добавление пункта «Скрыть выделенные» в контекстное меню выбранного файла. При помощи этой функции можно скрыть все выбранные файлы одним лишь нажатием клавиши мыши из контекстного меню выделенных объектов. В данном случае нам понадобится вносить изменения в раздел AllFilesystemObjects, так как действия должны выполняться при выборе любого объекта проводника Windows. Кроме того, поскольку операция, можно сказать, штатная, для реализации этой задачи будет использоваться системная функция ShellExecute. Сразу обращаю ваше внимание на то, что ввиду применения функции ShellExecute, в данном разделе не создается подраздел Command.

Должны быть выполнены следующие операции:

  1. Внутри раздела HKEY_CLASSES_ROOT\AllFilesystemObjects\shell создается дочерний раздел Windows.HideSelected.
  2. Добавляется строковый параметр «Description» со значением «@shell32.dll,-37575»;
  3. Добавляется строковый параметр «ExplorerCommandHandler» со значением «<0947c622-f98a-48a5-9df7-60e5fe202e07>».
  4. Добавляется строковый параметр «Icon» со значением «imageres.dll,-5314».
  5. Добавляется строковый параметр «MUIVerb» со значением «@shell32.dll,-37574».

Получаемый reg-файл будет выглядеть так, как показано в листинге 2.

На экране 3 видно, что нам дали выполненные изменения в реестре.

Экран 3. Элемент «Скрыть выбранные элементы» в контекстном меню при выборе файла

Как мы видим, в обоих примерах фигурировали две библиотеки: shell32.dll и imageres.dll. Первая библиотека включает в себя команды, выполняемые операционной системой (функция ShellExecute), а вторая представляет собой хранилище системных значков, которые можно ассоциировать с тем или иным элементом контекстного меню. По этой причине я рекомендую создать документ, описывающий возможности данных библиотек.

Добавляем элементы в контекстное меню средствами GPO

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

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

  1. Для начала откроем оснастку «Управление групповой политикой». В ней нужно создать новый или выбрать существующий объект групповой политики. Так как большинство изменяемых параметров реестра входит в раздел из «HKEY_CLASSES_ROOT», данный объект следует связать с подразделением, к которому относятся целевые компьютеры. Затем следует открыть для данного объекта редактор управления GPME. Так, в нашем примере создается объект GPO «Контекстные меню» и он привязывается ко всему домену. Открываем для этого объекта редактор политик.
  2. Поскольку для подраздела PowerShell из раздела реестра Directory необходимо сменить владельцев, для начала следует предоставить пользователям разрешения на изменение параметров в разделах реестра. Для этого переходим к разделу «Конфигурация компьютера»\«Политики»\«Конфигурация» Windows\«Параметры безопасности»\«Реестр». В области действий вызываем контекстное меню и выбираем пункт добавления раздела. В открывшемся диалоговом окне следует перейти к разделу реестра CLASSES_ROOT\Directory\shell\Powershell. Далее в диалоговом окне дополнительных параметров безопасности в разделе изменений владельца выбирается группа безопасности, для которой будут предоставлены полные права (учтите, что предоставлять такие права для группы пользователей в большинстве случаев рискованно и распределять права следует с осторожностью). Включите флажок наследования. Кроме того, добавьте для выбранной группы разрешения, включающие полный доступ к разделу. В открывшемся диалоговом окне добавления проекта оставляем переключатель на режиме распространения наследуемых разрешений на все подразделы и вносим изменения. В случае добавления идентичных пунктов для свободного пространства «Проводника Windows» предоставьте соответствующие разрешения еще и для раздела Directory\Background.
  3. Теперь при помощи предпочтений групповой политики из раздела HKEY_CLASSES_ROOT\Directory\shell\Powershell будет удаляться параметр «Extended». Для этого следует развернуть узел «Конфигурация компьютера», а затем перейти к узлу «Настройка»\«Конфигурация Windows». Щелкните в области сведений правой кнопкой мыши и из контекстного меню последовательно выберите команды «Создать» и «Элемент реестра». Поскольку у нас будет удаляться параметр реестра, выберите из раскрывающегося списка «Действие» пункт «Удалить». В раскрывающемся списке «Куст» (Hive) выберите ветвь реестра «HKEY_CLASSES_ROOT». После этого при помощи браузера элементов реестра укажите параметр «Extended». Элемент предпочтения реестра готов. Можно сохранять изменения. Диалоговое окно элемента предпочтений групповой политики показано на экране 4.
  4. Теперь осталось создать раздел реестра с соответствующими параметрами для добавления в контекстное меню второго пункта. В принципе, так как требуется добавить четыре параметра, все эти действия можно выполнить при помощи элементов предпочтения реестра, но если операция предполагает добавление большого количества параметров, то можно воспользоваться возможностями сценариев автозагрузки. Для этого перейдите в раздел «Конфигурация компьютера»\«Политики»\«Конфигурация» Windows\«Сценарии (запуск/завершение)» и откройте диалоговое окно свойств параметра политики «Автозагрузка». В диалоговом окне «Свойства: Автозагрузка» нажмите на кнопку «Добавить» и при помощи кнопки обзора поместите требуемый Reg-файл (например, файл AddHideItem.reg) в папку сценариев автозагрузки. После этого укажите в поле «Имя сценария» значение «regedit.exe», а в текстовом поле «Параметры сценария» значение «/s и имя файла», как показано на экране 5.
  5. После этого можно обновлять параметры политики на целевых компьютерах и проверять выполненные действия.
Экран 4. Создание элемента предпочтения реестра
Экран 5. Добавление сценария автозагрузки

Теперь вы знаете, из каких компонентов состоят контекстные меню операционных систем Windows и как можно добавить в различные контекстные меню свои уникальные пункты. Мы рассмотрели основные подразделы реестра, отвечающие за пункты контекстных меню. На нескольких примерах были продемонстрированы методы добавления новых пунктов в контекстное меню как вручную, так и централизованно, при помощи групповой политики. Я надеюсь, что благодаря данной статье вы сможете с легкостью настроить контекстные меню своих рабочих систем под конкретные потребности.

Как добавить пункт в контекстное меню Windows

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

Для тех кто не в курсе, Конте́кстное меню́ — это элемент графического интерфейса windows, представляющий собой список команд, вызываемый пользователем для выбора необходимого действия над выбранным объектом. Команды контекстного меню относятся к тому объекту, над которым это меню было вызвано. В данной статье рассматривается вопрос добавления пункта в контекстное меню, вызываемого на рабочем столе. Способ описанный в статье, подойдет для всех версий windows.

Как добавить пункт в контекстное меню Windows

Добавление пункта меню происходит с помощью внесения изменений в реестр windows. Для открытия реестра, вызываем диалоговое окно «выполнить» сочетанием клавиш +r, где вводим команду regedit и нажимаем OK.

Переходим по пути HKEY_CLASSES_ROOT\Directory\Background\shell. Где кликаем правой кнопкой мыши по разделу shell и нажимаем пункт создать -> раздел.


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

После нажимаем правой кнопой мыши по созданному разделу и вновь создаем новый раздел.

Называем его маленькими английскими буквами «command».

Переходим в раздел command и открываем параметр «По умолчанию«. Где в поле значение вводим путь к программе или приложению которое хотим добавить в контекстное меню.

В моем случае, путь к файлу панели управления находится в системной папке system32.

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

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

25. Windows. Главное меню. Назначение пунктов главного меню.

Главное меню — один из основных систем элементов управления Windows 98. Она отличается тем, что доступ к нему возможен всегда. Открывается при помощи Пуск. С помощью главного меню можно:

Запустить все программы, установленные под управлением ОС или зарегистрированные в ней.

Открыть последний документ.

Получить доступ ко всем средствам настройки ОС.

Получить доступ к поисковой и справочной системы Windows 98

Исполз. для корректного завершения работы с сист. перед выкл. питания.

В структуру Главного меню входят два раздела

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

Обязательный раздел Главного меню имеют пункты

Пункт «Программы» открывает доступ для иерархической структуре, содержащей указатели для запуска приложений, установленных на компьютере. Для удобства пользователя указатели объединяют в категории. Если категория имеет значок в ней имеется вложенные категории. Указатели, присутствующие в Главном меню имеют статус ярлыков, а их категории — статус папок.

26. Windows. Установка и удаление приложений windows. Установка оборудования.

Несколько способов: Основной: использование значка Установка и удаление программ, в папке Панель инструментов (Пуск->Настройка-> панель управления). Перед началом установки нового приложения следует закрыть все открытые программы. Установка начинается:. Добавить/Удалить, после запускает мастер установки. С помощью «Обзор» разыскать Setup exe ->Готово->действовать по инструкциям. Во многих случаях компьютер. Следует перезагрузить. Удаление производиться этой же программой. Установка оборудования. Аппаратное подключение— физическое соединение с компьютером. Программное подключение — установка программного драйвера, является посредником между ОС и аппаратом. При установке драйвера происходит выделение операционной системой части ресурсов новому eустройству, регистрирует устройство в реестре ОС. Если устройство является самоустанавливающимся (Plug-and-Play) после включения питания появляется сообщение «Обнаружено неизвестное устройство» ОС приступает к подбору драйвера для него. Пуск->Настройка->панель управления->Установка обор. Мастер установки. Компьютер следует после установки перезагрузить на наличие конфликтов.

27. Методы архивации. Архиваторы типа rar, zip. Принципы сжатия информации.

Объем внешней памяти ЭВМ растут, но потребность в архивации не уменьшается. Процесс записи файла в архивный файл называется архивированием, а извлечение файла из архива – разархивированием. Упакованный(сжатый) файл называется архивом. Архивация информации – преобразование информации при которой объем информации уменьшается, а количество функции остается прежним. Степень сжатия информации зависит от типа функция, а так же от выбранного метода упаковки. Степень(количество) сжатия функции которая характеризуется коэффициентов сжатия Kc, определить как отношение объема исходного объему исходного функции Vи, выраженное в %. (Kc=Vc/Vи) Чем меньше Кс тем выше степень сжатия информации. Все используемые методы сжатия информации можно разделить на 2 класса: — упаковка без потерь информации(обратимый алгоритм); — упаковка с потерей информации(необратимый) В 1-ом случае информацию можно точно восстановить по имеющейся упакованной информации. По 2-ом случае распакованное будет отличаться от исходного. В настоящее время разработано много алгоритмов без потерь, однако используют они 2 идеи: 1. основанная на учете частот символов, разработанная Хаффманом в 1952году. Базируется на том факте, что в тексте частота символов различна. По методу часто встречаются символы, кодируются короткими последовательностями битов, а более редкие символами – длинными последовательностями. К каждому сжатому архиву прикладывается таблица соответствия символов и кодов соответствия буквам и символам. 2. Состоит в использовании того факта, что в сообщении часто встречается несколько подряд идущих одинаковых байтов, а некоторые последовательности байтов повторяются многократно. При упаковке такие места можно заменить командой вида «повторить данный байт n раз» или «взять часть текста для n байтов, которые встречались m байтов назад». Такой алгоритм архивации носит имя RLE – кодирование путем учета кодирования. Упакованная этим методом последовательность состоит из управляющих байтов за которыми следует один или несколько байтов данных. Метод использования в основном для сжатия файлов: BMP, PCX, TIF, GIF. RLF – низкая степень сжатия файлов с малым числом повторяющихся байтов. Архивный файл(архив) представляется собой из 1 или нескольких файлов, помещенных в сжатом виде в единый файл, из которого их можно извлечь в первоначальном виде. Архив содержит: оглавление, позволяющее узнать какие файлы содержатся в архиве. В оглавлении архива содержится информация о файле: — имя файла, — сведения о каталоге, в котором содержится файл, — дата и время, — размер файла на диске и в архиве, — код циклического контроля. В качестве расширений архивным файлом по умолчанию устанавливается имя соответствующей программой архиватора. Для архивации используется программа упаковки: RAR, ZIP, ARJ, WINZIP, WINRAR. WINZIP, WINRAR. Важные возможности архиватора: 1. Создание многотомных архивов с возможностью задания произвольного размера тома. 2. Создание пароля для доступа в архив. 3. Создание самораспаковывающихся SFX-архивов. Сжатие информации. Для уменьшения размеров мультимедийных файлов используют процедуру сжатия. Под сжатием понимают преобразование информации, в результате которой исходный файл уменьшается в объеме, а количество информации в сжатом файле уменьшается на величину, которой практически можно пренебречь. Разработано несколько стандартов сжатия видео и аудио информации. Наибольшее влияние на развитие мультимедийных средств оказывает MPEG – объединенный комитет организаций – Интернациональный Орган по Стандартизации (ISO) и Интернациональный Электротехнической Комиссии (IEC). Этот комитет разработал стандарты с одноименными названиями.


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

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

Заранее спасибо за ответ Андрей.

Сведения о вопросе

Ответы (2) 

Как добавить свой пункт в контекстное меню рабочего стола и компьютера

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

Панель управления в контекстном меню

Откройте редактор реестра.

  1. В зависимости от того, где вы хотите создать пункт меню, выберите раздел.
    • для меню «Компьютер» перейдите в раздел:
    • для меню рабочего стола перейдите в раздел:
  2. Щелкните правой кнопкой мыши по разделу shell и выберите пункт СоздатьНовый раздел. Имя для раздела можно выбрать любое, но оно обязательно должно быть латинское. Назовите его, например, Item1. В этом разделе создайте строковые параметры:
    • MUIVerb (обязательно) отвечает за название пункта меню, поэтому значение можете выбирать любое. Я назвал свой Панель управления.
    • Icon (необязательно) задает значок для пункта меню. Можно задать путь к библиотеке (dll) и номер ресурса (значка), либо полный путь к исполняемому файлу (если он в системной папке, достаточно указать только имя). Для пункта «Панель управления» я задал стандартный значок imageres.dll,22 (сначала имя файла, а через запятую – номер ресурса). Впрочем, можно было указать просто control.exe.
    • Position (необязательно) отвечает за расположение пункта в контекстном меню. Вы можете задать ему значение Top (вверху) или Bottom (внизу). Если значение не задавать, пункт меню окажется в его середине. Я расположил свой пункт вверху.
    • Extended (необязательно) отвечает за отображение пункта в меню. Когда параметр присутствует, чтобы увидеть созданный пункт, нужно вызывать контекстное меню, удерживая нажатой клавишей SHIFT. Этому параметру не требуются значения.
  3. В разделе Item1 создайте подраздел command.
  4. В подразделе command дважды щелкните параметр (По умолчанию) и введите команду или полный путь к программе. Для вызова панели управления я указал control.exe (полный путь не нужен, поскольку исполняемый файл находится в системной папке).

Если вы хотите создать два пункта, создайте раздел Item2 и повторите шаги 3 – 5. Таких пунктов можно сделать сколько угодно.

Посмотрим, что получилось в реестре.

Параметры пункта меню в реестре

Уже можно посмотреть – в контекстном меню появился пункт «Панель управления», и он работает!

Этот способ можно использовать не только для выполнения команд и запуска программ, но и для открытия сайтов в любимом браузере. На шаге 4 укажите путь к исполняемому файлу браузера и URL.

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

Содержание:

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

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

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

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

Язык: Русский Формат:

Обновлено: 2020-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. В своём арсенале она имеет раздел «Сервис», в котором содержится инструмент «Автозагрузка». Третья вкладка здесь носит название «Контекстное меню» и предоставляет удобный доступ к меню папок, файлов и дисков. Причём сразу удалять пункты необязательно, можно их просто выключить и они не будут отображаться, но могут быть активированы в любой момент!

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

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

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

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

Выводы

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

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

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

В этом примере используется функция InsertMenu, так как нам надо просто добавить пункты в меню. Если планируется использование дополнительных спецэффектов, то эту функцию можно заменить на более современную InsertMenuItem.

Но просто добавлять пункты в меню бессмысленно, нам надо как-то обрабатывать события, возникающие при их выборе. Это тоже несложно. При выборе пункта системного меню родительскому окну отправляется сообщение WM_SYSCOMMAND, у которого wParam имеет значение заданного идентификатора этого пункта.

  1. ; Обработчик сообщений окна
  2. . . .
  3. cmp [ msg ] , WM_SYSCOMMAND
  4. je . wmmenu
  5. . . .
  6. ; Обработчик сообщений от системного меню
  7. . wmmenu :
  8. ; Выбран первый добавленный пункт меню?
  9. cmp [ wparam ] , >je . action_1
  10. ; Выбран второй добавленный пункт меню?
  11. cmp [ wparam ] , >je . action_2
  12. ; Передача системного сообщения дальше по цепочке обработчиков
  13. invoke DefWindowProc , [ hwnddlg ] , [ msg ] , [ wparam ] , [ lparam ]
  14. jmp . processed
  15. . . .

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

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

Пример программы с исходным текстом (FASM)

Илон Маск рекомендует:  Опыт написания поисковой системы
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL