Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Этот раздел организован следующим образом:
Лучшие практики
Статические глаголы самые простые для реализации и предоставляют богатую функциональность. Мы настоятельно рекомендуем вам реализовать глагол, используя один из методов статического глагола.
Наилучшие практики для реализации глаголов
В следующем списке представлены лучшие практики для реализации глаголов.
- Всегда выбирайте самый простой метод глагола, который соответствует вашим нуждам.
- При возможности используйте статический метод глагола.
- Не выполняйте ресурсоемкие операции или операции ввода-вывода в потоке пользовательского интерфейса. Оба объекта IShellExtInit::Initialize и IContextMenu::QueryContextMenu должны быть очень консервативными в выполняемой работе. IContextMenu::InvokeCommand необходимо выполнить в другом процессе или создать новый поток, чтобы избежать блокировки вызывающего объекта.
- Добавьте к глаголам префикс с именем независимого поставщика программного обеспечения (ISV), как показано ниже
ISVName.verb. Использование неквалифицированных имен может привести к столкновениям с несколькими независимыми разработчиками ПО, которые выбрали одно и то же имя глагола. - Всегда используйте идентификатор ProgID для конкретного приложения. Так как некоторые типы элементов не используют это сопоставление, необходимо использовать уникальные имена поставщиков.
- Расположите пользовательский интерфейс относительно вызывающего метода, но не запускайте на потоке вызова.
- Не принимайте возвращаемое значение S_OK для канонических команд, переданных методу IContextMenu::InvokeCommand. Это приводит к невозможности вызова реальной реализации глагола и возвращает код ошибки для канонических глаголов. Если вы не поддерживаете канонические глаголы, верните ошибку при обнаружении ненулевого значения HIWORD(lpVerb).
- Избегайте использования rundll32.exe в качестве хоста для вашего глагола.
- При реализации IContextMenu::QueryContextMenu обязательно верните количество глаголов, которые были добавлены в меню, используя значение HRESULT и макрос ResultFromShort.
- Если вы регистрируетесь в одном из следующих записей раздела реестра, будьте осторожны и обязательно зарегистрируйте обработчик в наиболее конкретном типе, чтобы уменьшить возможные непредвиденные последствия:
- HKEY_CLASSES_ROOT\*
- HKEY_CLASSES_ROOT\AllFileSystemObjects
- HKEY_CLASSES_ROOT\Folder
- HKEY_CLASSES_ROOT\Directory
- Задайте ключ MayChangeDefaultMenu только если вы предполагаете, что в контекстном меню может потребоваться изменить команду по умолчанию. Если ваш обработчик не изменяет команду по умолчанию, тогда следует избегать установки этого ключа, так как это приводит к тому, что система загружает вашу DLL без необходимости.
- Сведите к минимуму работу, выполняемую в IShellExtInit::Initialize. Для обработчиков контекстного меню захватывайте объект данных, переданный в IShellExtInit::Initialize, и затем обрабатывайте его в IContextMenu::QueryContextMenu или IContextMenu::InvokeCommand.
Лучшие практики для нескольких глаголов выбора
Поскольку в сценарии с несколькими выборами количество элементов может быть большим, важно учитывать влияние на производительность ваших реализаций глаголов. Например, когда пользователь ищет "*" по области, включающей большое количество элементов, а затем нажимает Выбрать все и щелкает правой кнопкой мыши, команда отображается с выбранной областью, которая может содержать тысячи элементов. В результате глаголы должны рассматривать лишь первый элемент в выбранном наборе, а также общее количество элементов. Первый элемент определяется как элемент в верхней части представления или элемент, который пользователь сначала щелкнул правой кнопкой мыши.
В Windows 7 и более поздних версиях количество элементов, передаваемых в команду, ограничено 16 при запросе контекстного меню. Затем глагол создается и инициализируется повторно с полным выделением при вызове этого глагола.
В некоторых случаях следует рассмотреть небольшое количество фиксированных элементов. Например, для глагола "diff" следует учитывать только первые два элемента. Как правило, вам не нужно тестировать каждый элемент в выборе, чтобы узнать, является ли он определенным типом или запрашивать каждый элемент в выборе для его свойств. Посмотрите именно на первый элемент и решите, нужно ли добавить ваш глагол.
Разнородные подборки
Оптимистические глаголы автоматически добавляются в случае множественного выбора, предполагая, что непроверенные элементы могут обрабатываться глаголом. В отличие от этого, пессимистичные глаголы не добавляются, если выбор содержит непроверенные элементы и добавляются только в тех случаях, когда количество элементов невелико.
Глаголы стиля игрока должны быть оптимистичными и беззвучно пропускать элементы, которые не обрабатываются. Если несовершение действий по элементам может привести к потере данных или путанице, глагол должен предупреждать пользователей об элементах, которые не могут быть обработаны. Например, глагол «создать резервную копию» должен указывать на то, что некоторые элементы не удалось заархивировать.
Связанные темы