Я разрабатываю расширение пространства имен для Windows Explorer.
В своем расширении я использую иконки наложения, я реализовал интерфейс:
IShellIconOverlay
int GetOverlayIndex(IntPtr pidl, out int iconIndex);
int GetOverlayIconIndex(IntPtr pidl, out int iconIndex);
В этой функции я использую функцию SHGetIconOverlayIndex получить индекс наложения значка в списке изображений из местоположения и индекса dll.
Моя проблема в том, что у меня уже есть значки в списке реестра идентификаторов наложений из другого расширения, которое я использую, и я хочу использовать те же значки от моего расширения значков наложения до моего расширения пространства имен.
В настоящее время функция SHGetIconOverlayIndex создает новый слот в списке изображений, и хорошо известно, что окна имеют пределы 14-15 наложенных значков.
Итак, как я могу переместить мои иконки между этими двумя расширениями?
Если функция ‘SHGetIconOverlayIndex’ предоставляет вам ограниченный список системных изображений, почему бы не загрузить значки из ресурсов расширения значков наложения, используя «LoadLibrary» -> «FindResource», или использовать «ExtractIcon». Вы можете создать свой собственный список изображений в расширении пространства имен и добавить свое наложение изображения в этот список изображений в качестве наложения, используя ‘ImageList_SetOverlayImage’.
MSDN говорит о SHGetIconOverlayIndex:
Примечание. После того, как изображение было загружено в системный список образов во время инициализации, его нельзя изменить. Имя файла и индекс, указанные в pszIconPath и iIconIndex, используются только для идентификации наложения значков. SHGetIconOverlayIndex нельзя использовать для изменения списка системных образов.
Так что просто передайте имя файла и индекс в SHGetIconOverlayIndex. Окно не будет создавать новый слот и будет использовать уже созданный обработчик значка наложения.