Выбор метода статического или динамического контекстного меню

Этот раздел организован следующим образом:

Выбор метода verb

Настоятельно рекомендуется реализовать контекстное меню с помощью одного из методов статических глаголов.

Методы статических команд

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

Статический глагол Описание
CreateProcess с параметрами командной строки Это самый простой и знакомый способ реализации статической команды. Процесс вызывается путем вызова функции CreateProcess с выбранными файлами и любыми необязательными параметрами, передаваемыми в командной строке. Откроется файл или папка.
Этот метод имеет следующие ограничения:
  • Длина командной строки ограничена 2000 символами, что ограничивает количество элементов, которые может обрабатывать команда.
  • Может использоваться только с элементами файловой системы.
  • Не включает повторное использование уже запущенного процесса.
  • Требует установки исполняемого файла для обработки команды .

DropTarget/IDropTarget Активация глаголов на основе COM означает, что поддерживает активацию in-proc или out-of-proc. DropTarget/IDropTarget также поддерживает повторное использование уже запущенного обработчика, когда интерфейс IDropTarget реализуется локальным сервером. Он также прекрасно выражает элементы с помощью маршалированного объекта данных и предоставляет ссылку на цепочку вызывающего сайта, чтобы можно было взаимодействовать с вызывающим объектом через QueryService.
Windows 7 и более поздние версии: IExecuteCommand Самый прямой метод реализации. Так как это метод вызова на основе COM (например, DropTarget), этот интерфейс поддерживает активацию in-proc и out-of-proc. Команда реализует IExecuteCommand и IObjectWithSelection и при необходимости IInitializeCommand. Элементы передаются непосредственно в виде массива элементов оболочки, и другие параметры из вызывающего средства доступны реализации команды, включая точку вызова, состояние клавиатуры и т. д.
Windows 7 и более поздних версий:ExplorerCommand/ IExplorerCommand Позволяет источникам данных, предоставляющим команды командного модуля через IExplorerCommandProvider , использовать эти команды в качестве команд в контекстном меню. Так как этот интерфейс поддерживает только внутрипроцессную активацию, его рекомендуется использовать источниками данных оболочки, которым необходимо совместно использовать реализацию между командами и контекстными меню.

 

Примечание

IExplorerCommand — это гибрид между статическими и динамическими глаголами. IExplorerCommand был объявлен в Windows Vista, но его возможность реализовать глагол в контекстном меню является новой в Windows 7.

 

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

Предпочтительные методы динамических команд

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

Тип команды Описание
Статическая команда (указанная в предыдущей таблице) + Расширенный синтаксис запросов (AQS) Этот вариант позволяет получить динамическую видимость глаголов.
Windows 7 и более поздние версии: IExplorerCommand Этот вариант обеспечивает общую реализацию команд и команд обозревателя, отображаемых в модуле команд в Windows Обозреватель.
Windows 7 и более поздних версий: IExplorerCommandState + static verb Этот вариант также получает динамическую видимость глаголов. Это гибридная модель, в которой используется простой внутрипроцессный обработчик для вычисления того, следует ли препарировать заданную статическую команду. Это можно применить ко всем методам реализации статических глаголов, чтобы обеспечить динамическое поведение и свести к минимуму уязвимость внутрипроцессной логики. Преимущество IExplorerCommandState заключается в запуске в фоновом потоке и тем самым позволяет избежать зависания пользовательского интерфейса. Это значительно проще, чем IContextMenu.

 

Не рекомендуется использовать методы динамических команд

IContextMenu — это самый мощный, но и самый сложный метод для реализации. Он основан на внутрипроцессных COM-объектах, которые выполняются в потоке вызывающего объекта, который обычно Обозреватель Windows, но может быть любым приложением, в котором размещаются элементы. IContextMenu поддерживает видимость глаголов, упорядочение и настраиваемое рисование. Некоторые из этих функций были добавлены в функции статических глаголов, такие как значок, связанный с командой, и IExplorerCommand для управления видимостью.

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

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

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

Поддержка командных методов по операционной системе

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

Метод Verb Windows XP Windows Vista Windows 7 и более
CreateProcess X X X
DDE X X X
DropTarget X X X
ExecuteCommand X X
ExplorerCommand X
ExplorerCommandState X

 

Рекомендации по обработчикам контекстного меню и нескольким командам выбора

Создание обработчиков контекстного меню

Настройка контекстного меню с помощью динамических команд

Контекстные меню и обработчики контекстного меню

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

Команды и сопоставления файлов