Поделиться через


Расширение контекстных меню

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

Дополнительные сведения доступны здесь:

Контекстные меню для объектов файловой системы

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

Так как контекстные меню часто используются для управления файлами, Shell предоставляет набор команд по умолчанию, таких как "Вырезать" и "Копировать", которые отображаются в контекстном меню для любого файла. Обратите внимание, что хотя Open With является командой по умолчанию, она не отображается для некоторых стандартных типов файлов, таких как .wav. На следующем рисунке примера каталога "Мои документы", который также использовался в качестве примера в разделе "Настройка значков", отображается контекстное меню по умолчанию, отображаемое при щелчке правой кнопкой мыши MyDocs4.xyz.

Снимок экрана: контекстное меню по умолчанию для объектов файловой системы

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

Снимок экрана: настраиваемое контекстное меню для объектов файловой системы

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

Все, что необходимо для расширения контекстного меню для типа файла, заключается в создании записи реестра для каждой команды. Более сложный подход — реализовать обработчик контекстного меню, который позволяет расширять контекстное меню для типа файла на основе каждого отдельного файла. Дополнительные сведения см. в разделе "Создание обработчиков контекстного меню".

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

Каждая команда в контекстном меню определяется в реестре своим verb. Эти команды совпадают с теми, которые используются ShellExecuteEx при запуске приложений программным способом. Дополнительные сведения об использовании ShellExecuteExecuteEx см. в обсуждении в разделе "Запуск приложений".

A verb — это простая текстовая строка, используемая Shell для идентификации связанной команды. Каждая verb из них соответствует командной строке , используемой для запуска команды в окне консоли или пакетном (.bat) файле. Например, открытиеverb обычно запускает программу для открытия файла. Обычно строка команды выглядит примерно так:

"My Program.exe" "%1"

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

Замечание

Если любой элемент командной строки содержит или может содержать пробелы, он должен быть заключен в кавычки. В противном случае, если элемент содержит пробел, он не будет правильно анализироваться. Например, "Мой Program.exe" запустит приложение должным образом. Если вы используете My Program.exe, система попробует запустить "My", используя "Program.exe" в качестве первого аргумента командной строки. Всегда следует использовать кавычки с такими аргументами, как "%1", которые преобразуются в строки с помощью Shell, потому что нельзя быть уверенным, что строка не будет содержать пробел.

 

Глаголы также могут иметь связанную с ними строку отображения, которая отображается в контекстном меню вместо самой строки verb. Например, строка отображения для openas — Open With. Как и обычные строки меню, включение символа '&' в отображаемую строку позволяет выбрать команду с помощью клавиатуры.

Канонические глаголы

Как правило, приложения отвечают за предоставление локализованных строк отображения для определяемых ими команд. Однако для обеспечения степени независимости языка система определяет стандартный набор часто используемых глаголов, называемых каноническими командами. Канонический verb код можно использовать с любым языком, и система автоматически создает правильно локализованную строку отображения. Например, отображаемая строка Openverb будет иметь значение Open в английской системе и Öffnen в немецкой системе.

Канонические глаголы включают:

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

 

Печать verb также каноническая, но никогда не отображается. Он позволяет пользователю распечатать файл, перетащив его в объект принтера.

Расширенные глаголы

Когда пользователь щелкает объект правой кнопкой мыши, контекстное меню содержит все обычные команды. Однако могут быть команды, которые вы хотите поддерживать, но не отображались в каждом контекстном меню. Например, можно использовать команды, которые обычно не используются или предназначены для опытных пользователей. По этой причине можно также определить один или несколько расширенных глаголов. Эти глаголы также являются строками символов и похожи на обычные глаголы. Они отличаются от обычных глаголов по способу их регистрации. Чтобы получить доступ к командам, связанным с расширенными глаголами, пользователь должен щелкнуть правой кнопкой мыши объект, удерживая клавишу SHIFT. Впоследствии расширенные глаголы будут отображаться вместе с обычными глаголами.

Расширение контекстного меню для типа файла

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

На контекстном меню первым отображается значение по умолчанию verb. Его назначение заключается в предоставлении Shellverb для использования при вызове ShellExecuteEx, если verb не указано. Параметр Shell не обязательно выбирает значение по умолчанию verb , если ShellExecuteEx используется в этом режиме. Для Shellверсий 5.0 и более поздних версий, найденных в системах Windows 2000 и более поздних версий, Shell используется первый доступный verb из следующего списка. Если ни один недоступен, операция завершается ошибкой.

  • Открыть verb
  • Значение по умолчанию verb
  • Первый verb в реестре
  • Открыть с помощью verb

Для Shell версий до версии 5.0 опустите третий элемент.

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

На следующем рисунке показано контекстное меню типа файла MYP, используемого в типах файлов и значках настройки. Теперь в его меню быстрого доступа присутствуют глаголы: открыть, doit, печатать и printto, при этом doit является значением по умолчанию verb. Контекстное меню выглядит следующим образом.

Снимок экрана: настраиваемое контекстное меню

Записи реестра, используемые для расширения контекстного меню, показанного на предыдущем рисунке:

HKEY_CLASSES_ROOT
   .myp
      (Default) = MyProgram.1
   MyProgram.1
      (Default) = MyProgram Application
      Shell
         (Default) = doit
         open
            command
               (Default) = C:\MyDir\MyProgram.exe "%1"
         doit
            (Default) = &Do It
            command
               (Default) = C:\MyDir\MyProgram.exe /d "%1"
         print
            command
               (Default) = C:\MyDir\MyProgram.exe /p "%1"
         printto
            command
               (Default) = C:\MyDir\MyProgram.exe /p "%1" "%2" %3 %4

Хотя команда Open With выше первого разделителя, она автоматически создается системой и не требует записи реестра. Система автоматически создает отображаемые имена для канонических глаголов open и print. Поскольку "doit" не является каноническим verb, ему назначается имя для отображения "&Do It", которое можно выбрать нажатием клавиши D. Печать verb не виден в контекстном меню, но его использование позволяет пользователю печатать файлы, перетаскивая их на значок принтера. В этом примере %1 представляет имя файла и %2 имя принтера.

Глаголы можно подавлять с помощью параметров политики, добавив значение SuppressionPolicy в ключ verb. Задайте для идентификатора политики значение SuppressionPolicy. Если политика включена, verb и связанные с ней пункты контекстного меню отключаются. Возможные значения идентификаторов политики см. в перечислении RESTRICTIONS.

Расширение контекстного меню для предопределенных Shell объектов

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

Список предопределенных объектов можно найти в разделе "Предопределенные Shell объекты " в разделе "Создание Shell обработчиков расширений". Эти предопределенные объекты, «контекстные» меню которых можно расширить путем добавления команд в реестр, отмечены в таблице словом "Verb".

Регистрация приложения для обработки произвольных типов файлов

В предыдущих разделах этого документа описано, как определить контекстные пункты меню для определенного типа файла. Помимо прочего, определение контекстного меню позволяет указать, как связанное приложение открывает элемент типа файла. Однако, как описано в разделе "Типы файлов", приложения также могут зарегистрировать отдельную процедуру по умолчанию, которую пользователь пытается использовать приложение для открытия типа файла, который не связан с приложением. Этот раздел рассматривается здесь, так как вы регистрируете процедуру по умолчанию так же, как и элементы контекстного меню.

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

Чтобы зарегистрировать процедуру по умолчанию, поместите те же ключи реестра, которые вы создали для ProgID вашего приложения, в подраздел приложения HKEY_CLASSES_ROOT\Applications. Вы также можете включить значение FriendlyAppName, чтобы предоставить системе понятное имя приложения. Понятное имя приложения также может быть извлечено из исполняемого файла, но только в том случае, если значение FriendlyAppName отсутствует. В следующем фрагменте реестра показана пример процедуры по умолчанию для MyProgram.exe, которая определяет понятное имя и несколько контекстных элементов меню. Строки команд включают флаг /a, чтобы уведомить приложение о том, что он открывает произвольный тип файла. Если вы включаете вложенный ключ DefaultIcon, следует использовать универсальный значок.

HKEY_CLASSES_ROOT
   Applications
      MyProgram.exe
         FriendlyAppName = Friendly Name
         shell
            open
               command
                  (Default) = C:\MyDir\MyProgram.exe /a "%1"
            print
               command
                  (Default) = C:\MyDir\MyProgram.exe /a /p "%1"
            printto
               command
                  (Default) = C:\MyDir\MyProgram.exe /a /p "%1" "%2" %3 %4

Расширение нового подменю

Когда пользователь открывает меню "Файл " в проводнике Windows, первая команда — "Создать". При выборе этой команды отображается подменю. По умолчанию она содержит две команды, Папка и Ярлык, которые позволяют пользователям создавать вложенные папки и ярлыки. Этот подменю можно расширить, чтобы включить команды создания файлов для любого типа файла.

Чтобы добавить команду создания файла в подменю New , файлы приложения должны иметь тип файла , связанный с ними. Добавьте под-ключ ShellNew в ключ расширения имени файла. Когда выбирается команда «Создать» меню «Файл», Shell добавит её в подменю «Создать». Отображаемая строка команды будет описательной строкой, назначенной progID программы.

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

Ценность Описание
командование Выполняет приложение. Это REG_SZ значение, указывающее путь выполнения приложения. Например, можно настроить его для запуска мастера.
Данные Создает файл, содержащий указанные данные. Данные — значение REG_BINARY, содержащее данные файла. Данные игнорируются, если задано значение NULLFile или FileName.
Имя файла Создает файл, который является копией указанного файла. FileName — это значение REG_SZ , задающее полный путь к файлу для копирования.
Пустой файл Создает пустой файл. NullFile не присвоено значение. Если задан nullFile, значения Data и FileName игнорируются.

 

На следующем рисунке показан новый подменю для типа файла MYP, используемого в качестве примера в файлах типов и значках настройки. Теперь у него есть команда MyProgram Application. Когда пользователь выбирает приложение MyProgram из подменю Новое, Shell создает файл с именем "New MyProgram Application.myp" и передает его в MyProgram.exe.

Снимок экрана: настраиваемое меню

Теперь запись реестра выглядит следующим образом:

HKEY_CLASSES_ROOT
   .myp
      (Default) = MyProgram.1
      MyProgram.1
         ShellNew
            NullFile
   MyProgram.1
      (Default) = MyProgram Application
      DefaultIcon
         (Default) = C:\MyDir\MyProgram.exe,2
      Shell
         (Default) = doit
         open
            command
               (Default) = C:\MyDir\MyProgram.exe "%1"
         doit
            (Default) = &Do It
            command
               (Default) = C:\MyDir\MyProgram.exe /d "%1"
         print
            command
               (Default) = C:\MyDir\MyProgram.exe /p "%1"
         printto
            command
               (Default) = C:\MyDir\MyProgram.exe /p "%1" "%2" %3 %4