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

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

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

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

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

В следующем примере показано контекстное меню по умолчанию, которое отображается при щелчке правой кнопкой мыши MyFile.xyz-мс.

Снимок экрана: контекстное меню по умолчанию

Причина появления контекстного меню по умолчанию для MyFile.xyz-ms заключается в том, что .xyz-ms не является членом зарегистрированного типа файла. Напротив, .txt является зарегистрированным типом файлов. Если щелкнуть правой кнопкой мыши файл.txt , в верхнем разделе появится контекстное меню с тремя дополнительными командами: Печать, Изменить и Открыть с помощью.

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

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

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

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

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

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

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

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

"My Program.exe" "%1"

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

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

Потоковая передача элементов, не относящихся к файловой системе, и результатов OpenSearch.

В Windows 7 и более поздних версиях поддерживается подключение внешних источников к клиенту Windows через протокол OpenSearch . Это позволяет пользователям выполнять поиск в удаленном хранилище данных и просматривать результаты в windows Обозреватель. Стандарт OpenSearch версии 1.1 определяет простые форматы файлов, которые можно использовать для описания того, как клиент должен запрашивать веб-службу для хранилища данных и как служба должна возвращать результаты для просмотра клиентом.

Может потребоваться потоковая передача элементов, не относящихся к файловой системе, чтобы избежать необходимости скачивания элементов в случае результатов OpenSearch . Функция федеративного поиска позволяет искать элементы из расположений, не относящихся к файловой системе, которые поддерживают OpenSearch, например SharePoint и другие сайты, поддерживаемые веб-службами. При вызове глаголов для этих элементов система скачивает временную версию элемента и передает ее в реализацию команды. Рекомендуется избежать необходимости скачивания файла, регистрируя набор схем URL-адресов, поддерживаемых командой для потоковой передачи элементов. Команды делают это с помощью раздела реестра SupportedProtocols .

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

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

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

Чтобы зарегистрировать процедуру по умолчанию, поместите те же разделы реестра, которые вы создали для ProgID приложения, в подраздел приложения HKEY_CLASSES_ROOT\Applications. Вы также можете включить значение FriendlyAppName , чтобы указать системе понятное имя приложения. Понятное имя приложения также может быть извлечено из исполняемого файла, но только в том случае, если значение FriendlyAppName отсутствует.

В следующем примере записи реестра показана процедура по умолчанию для MyProgram.exe , которая определяет понятное имя и несколько пунктов контекстного меню. Строки команд содержат флаг /a для уведомления приложения о том, что оно открывает произвольный тип файла. Если вы включаете подраздел DefaultIcon , следует использовать универсальный значок.

HKEY_CLASSES_ROOT
   MyProgram.exe
      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"

Дополнительные ресурсы

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

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

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

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

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

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