Как создать расширение оболочки Overlay icon
Обработчик Overlay icon позволяет ассоциировать с любым файлом или директорией небольшую иконку, которая будет располагаться в нижнем правом углу основной иконки файла или директории.
В библиотеке Shell Ace обработчик Overlay icon реализует интерфейс IShellIconOverlayIdentifier
После создания проекта расширения необходимо добавить в проект модуль с обработчиком Overlay icon. Для этого выберите соответствующую иконку на вкладке Shell extension:
Появится окно с предложением ввести имя класса и выбрать перекрываемые методы:
После нажатия на кнопку OK в проект будет добавлен модуль с каркасом обработчика. При включении опции Create sample помимо каркаса обработчика будут создан пример готового расширения оболочки, который можно использовать для изучения библиотеки.
В обработчике можно перекрывать следующие виртуальные процедуры и функции:
procedure Initialize;
Процедура инициализации обработчика, вызывается один раз при создании экземпляра обработчика.
class function GetClassID: TCLSID;
Функция должна возвращать уникальный идентификатор обработчика. Библиотека Shell Ace изначально генерирует уникальный идентификатор при генерации шаблона обработчика, поэтому менять его нет необходимости.
class function GetDescription: UnicodeString;
Функция должна возвращать описание обработчика.
function GetOverlayIconInfo(var AFileName: UnicodeString; var AIndex: Integer; var AFlags: TdecOverlayIconFlags): Boolean;
Функция должна сформировать информацию об оверлейной иконке, вызывается в реализации метода GetOverlayInfo интерфейса IShellIconOverlayIdentifier. Если обработчик реализует оверлейную иконку, то функция должна вернуть True и заполнить параметры AFileName, AIndex и AFlags. В противном случае функция должна вернуть False.
В параметре AFileName должно быть возвращено полное имя файла, в котором содержится иконка. Допустимые типы файлов dll, exe, ico.
В параметре AIcon должен быть возвращен индекс иконки для случая, когда иконка содержится в dll или exe файле.
Параметр TdecOverlayIconFlags определен следующим образом:
TdecOverlayIconFlag = (oifIconFileName, oifIconIndex);
TdecOverlayIconFlags = set of TdecOverlayIconFlag;
Каждый из элементов множества соответствует одному из флагов, возвращаемых методом GetOverlayInfo интерфейса IShellIconOverlayIdentifier.
Значение | WinAPI флаг | Описание |
---|---|---|
oifIconFileName | ISIOI_ICONFILE | Параметр AFileName содержит корректный путь у файлу. |
oifIconIndex | ISIOI_ICONINDEX | Файл AFileName содержит более одной иконки, и параметр AIndex содержит индекс иконки в файле. |
function GetOverlayIconPriority: Integer;
Функция должна вернуть приоритет обработчика, вызывается в реализации метода GetPriority интерфейса IShellIconOverlayIdentifier. Допустимый интервал возвращаемых значений составляет от 0 до 100, 0 - минимальный, а 100 - максимальный приоритет. Одновременно на иконке объекта может отображаться только одна оверлейная иконка, поэтому в ситуациях, когда несколько обработчиков Overlay icon заявили о том, что конкретный файловый объект должен содержать их иконку, оболочкой Windows используется иконка того обработчика, который обозначил больший приоритет.
В случае, если обработчик не перекрывает данную функцию, то будет использоваться значение ноль.
function IsOverlayIconMember(const AFileName: UnicodeString; AAttributes: TdecOverlayIconFileAttributes): Boolean;
Функция должна вернуть True, если оверлейная иконка должна выводится поверх иконки файла или директории с именем AFileName, в противном случае False, вызывается в реализации метода IsMemberOf интерфейса IShellIconOverlayIdentifier.
В параметре AAttributes передаются атрибуты файла, тип TdecOverlayIconFileAttributes определен следующим образом:
TdecOverlayIconFileAttributes = set of (oiffCanCopy, oiffCanMove, oiffCanLink, oiffStorage, oiffCanRename, oiffCanDelete, oiffHasPropSheet, oiffDropTargat, oiffSystem, oiffEncrypted, oiffIsSlow, oiffGhosted, oiffLink, oiffShare, oiffReadOnly, oiffHidden, oiffNonEnumerated, oiffNewContent, oiffStream, oiffStorageAncestor, oiffValidate, oiffRemovable, oiffCompressed, oiffBrowsable, oiffFileSysAncestor, oiffFolder, oiffFileSystem, oiffHasSubfolder);
Каждый из элементов множества соответствует SFGAO-флагу.
Регистрация обработчика происходит в раздел реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers.
Обязательными для реализации в обработчике Overlay icon являются следующие методы:
- GetClassID
- GetOverlayIconInfo
- IsOverlayIconMember
Смотрите также:
- Что такое расширение оболочки
- Какие бывают расширения оболочки
- Как создать расширение оболочки
- Инициализация расширений оболочки
- Как создать расширение оболочки Context menu
- Как создать расширение оболочки Drag and drop context menu
- Как создать расширение оболочки Drop target
- Как создать расширение оболочки Icon
- Как создать расширение оболочки Info tip
- Как создать расширение оболочки Overlay icon
- Как создать расширение оболочки Preview
- Как создать расширение оболочки Property sheet
- Как создать расширение оболочки Property store
- Как создать расширение оболочки Thumbnail
- Как зарегистрировать расширение оболочки
- Как отлаживать расширение оболочки
- Использование логов