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


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

Заметка

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

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

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

Минимальные реализации IPersist и IPersistFolder требуются для IShellFolder, а для IContextMenu и IExtractIconтребуется минимальная реализация IShellFolder.

 

IPersist

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

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

 

Заметка

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

 

 

IPersistFolder

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

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

 

Заметка

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

 

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

 

IShellFolder

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

Интерфейс IShellFolder использует PIDLs вместо 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 и вспомогательных интерфейсов и включает поддержку управления PIDLs.

Справочник

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

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