Добавление значков и контекстных меню с расширениями оболочки
Заметка
Поиск на рабочем столе 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.
Связанные разделы