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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

"My Program.exe" "%1"

Если любой элемент командной строки содержит или может содержать пробелы, он должен быть заключен в кавычки. В противном случае, если элемент содержит пробел, он не будет правильно анализироваться. Например, "Моя 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"

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

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

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

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

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

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

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