Ответ 1
Единого API, который работает во всех версиях Windows, не существует, потому что Microsoft продолжает изменять API-интерфейсы эскизов с одной версии Windows на другую.
На Win2K вплоть до Vista и не включая более поздние версии вы можете получить IShellFolder
для родительской папки файла, используя SHGetDesktopFolder()
и IShellFolder::ParseDisplayName()
(или SHParseDisplayName()
в XP и более поздних версиях), затем используйте IShellFolder::GetUIObjectOf()
для извлечения интерфейса дочернего файла IExtractImage
, а затем вызвать его GetLocation()
чтобы установить размер изображения и его метод Extract()
для получения фактического изображения.
В Vista и позже вы можете:
1) используйте IThumbnailProvider
. IInitializeWith...
его для одного из своих интерфейсов IInitializeWith...
( IInitializeWithStream
, IInitializeWithItem
или IInitializeWithFile
), чтобы сообщить ему, какой файл вам интересен, а затем вызвать его GetThumbnail()
для получения фактического изображения. Кроме того, вы можете получить IShellItem
для нужного файла, а затем вызвать его метод BindToHandler
для получения файла IThumbnailProvider
.
2) используйте IThumbnailCache
. Передайте IShellItem
представляющий желаемый файл, GetThumbnail()
чтобы получить изображение.
3) используйте IShellItemImageFactory
. Используйте одну из SHCreateItemFrom...()
( SHCreateItemFromIDList()
, SHCreateItemFromParsingName()
, SHCreateItemFromRelativeName()
, SHCreateItemInKnownFolder()
, SHCreateItemWithParent()
), чтобы получить этот интерфейс для данного файла, а затем вызвать его GetImage()
.