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