Как создать расширение оболочки Overlay icon

Обработчик Overlay icon позволяет ассоциировать с любым файлом или директорией небольшую иконку, которая будет располагаться в нижнем правом углу основной иконки файла или директории.

В библиотеке Shell Ace обработчик Overlay icon реализует интерфейс IShellIconOverlayIdentifier

После создания проекта расширения необходимо добавить в проект модуль с обработчиком Overlay icon. Для этого выберите соответствующую иконку на вкладке Shell extension:

Создание обработчика Overlay icon

Появится окно с предложением ввести имя класса и выбрать перекрываемые методы:

Методы обработчика Overlay icon

После нажатия на кнопку 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 флагОписание
oifIconFileNameISIOI_ICONFILEПараметр AFileName содержит корректный путь у файлу.
oifIconIndexISIOI_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 являются следующие методы:

Смотрите также: