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


Добавление значков и контекстных меню с помощью расширений оболочки

Примечание

Windows Desktop Search 2.x — это устаревшая технология, которая изначально была доступна в качестве надстройки для Windows XP и Windows Server 2003. В более поздних выпусках используйте Windows Search .

Вы можете улучшить взаимодействие с пользователями с помощью Microsoft Windows Desktop Search (WDS) и обработчика протокола, реализовав расширения оболочки. Без дальнейшего расширения создаваемый обработчик протокола не будет включать следующие возможности взаимодействия с пользователем:

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

IShellFolder требует минимальных реализаций IPersist и IPersistFolder, а минимальная реализация IShellFolder требуется для IContextMenu и IExtractIcon, двух интерфейсов, которые обеспечивают более простой пользовательский интерфейс.

 

IPersist

Интерфейс IPersist определяет единый метод GetClassID, предназначенный для предоставления CLSID объекта, который может постоянно храниться в системе.

Метод Описание
GetClassID() Возвращает ClassID обработчика протокола.

 

Примечание

Тот же идентификатор CLSID следует реализовать для IPersist, IPersistFolder и IShellFolder.

 

 

IPersistFolder

Интерфейс IPersistFolder используется для инициализации объектов папок оболочки. Реализация этого интерфейса, который является производным от IPersist, заключается в том, как папка определяется, где она находится в пространстве имен оболочки.

Метод Описание
Initialize() Указывает объекту папки оболочки инициализировать себя на основе переданных сведений и возвращает S_OK

 

Примечание

Тот же идентификатор CLSID следует реализовать для IPersist, IPersistFolder и IShellFolder.

 

Этот интерфейс не используется напрямую. Он используется реализацией файловой системы интерфейса IShellFolder::BindToObject при инициализации объекта папки оболочки.

 

IShellFolder

Интерфейс IShellFolder используется для управления папками, и требуется частичная реализация, чтобы интерфейсы значков и контекста, реализованные для обработчика протоколов, правильно функционировали в пользовательском интерфейсе результатов поиска на рабочем столе Windows. Большая часть необходимых функций предоставляется с помощью метода GetUIObjectOf . Этот метод позволяет надстройке запрашивать интерфейсы IExtractIcon и IContextMenu .

Интерфейс IShellFolder использует PIDL вместо URL-адресов. В отличие от требований полного расширения пространства имен, надстройки могут использовать простую структуру IDL, содержащую только URL-адрес.

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

Метод Описание
BindToObject() Возвращает E_NOTIMPL
BindToStorage() Возвращает E_NOTIMPL
CreateViewObject() Возвращает E_NOTIMPL
SetNameOf() Возвращает E_NOTIMPL
ParseDisplayName() Преобразует URL-адрес в структуру PIDL.
CompareIDs() Сравнивает два значения PIDL
GetDisplayNameOf() Возвращает URL-адрес для PIDL.
GetUIObjectOf() Этот метод аналогичен методу OLE COM QueryInterface. При запросе значка вызывающий объект запрашивает IID_IExtractIcon; Если запрашивается контекстное меню, вызывающий запрашивает IID_IContextMenu.

 

Примечание

Тот же идентификатор CLSID следует реализовать для IPersist, IPersistFolder и IShellFolder.

 

IShellFolder не используется для перечисления папок. Это означает, что отображаемое имя папки будет физическим URL-адресом. В будущем это может измениться.

 

IContextMenu

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

Действие по умолчанию в контекстном меню — это то же действие, что и при двойном щелчке элемента. Без соответствующих интерфейсов IShellFolder или IContextMenu для элемента поведением по умолчанию для события двойного щелчка является передача URL-адреса в качестве аргумента в функцию ShellExecute.

 

IExtractIcon

IExtractIcon извлекает значок пользовательского интерфейса WDS на основе URL-адреса в PIDL, предоставленном обработчиком протокола.

 

Образец кода

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

Reference

Пример кода пользовательского интерфейса пользовательского обработчика протокола

Установка и регистрация обработчиков протокола