Imagemagick и другие инструменты открывают файлы каждый раз, поэтому они могут быть не самыми эффективными. . Встроенный механизм в Windows позволяет сохранять миниатюры в кеше, что теоретически дает значительный прирост скорости.
Из Как получить миниатюру файла с помощью Windows API? (ответ) про способы стало понятно, но было много проблем:
- IThumbnailProvider и IThumbnailCache не найдены в:
- ctypes.windll.shell32 (есть только функции, и кажется, что нет простого способа получить интерфейсы)
- win32com.shell.shell (PyWin32)< /li>
- IID_IThumbnailProvider и IShellItemImageFactory через SHCreateItemFromParsingName и IID:
- Этот IID не найден в win32com.shell.shell, поэтому они были предоставлены вручную.
- IThumbnailProvider, Метод IShellItem::BindToHandler: исправлено, но теперь ошибка такая же, как показано ниже:
Код: Выделить всё
# str(shell.IID_IShellItem) == '{43826D1E-E718-42EE-BC55-A1E261C37BFE}' # str(shell.BHID_ThumbnailHandler) == '{7B2E650A-8E20-4F4A-B09E-6597AFC72FB0}' item = shell.SHCreateItemFromParsingName(r'd:\some.png', None, str(shell.IID_IShellItem)) # str() is works IID_IThumbnailProvider = '{e357fccd-a995-4576-b01f-234630154e96}' provider = item.BindToHandler(None, shell.BHID_ThumbnailHandler, IID_IThumbnailProvider) # error > TypeError: 'There is no interface object registered that supports this IID' - IShellItemImageFactory: подозреваю, что IID используется неправильно, но из ответа ниже это должно работать:
Код: Выделить всё
IID_IShellItemImageFactory = '{bcc18b79-ba16-442f-80c4-8a59c30c463b}' item = shell.SHCreateItemFromParsingName(r'd:\some.png', None, IID_IShellItemImageFactory) # error > TypeError: 'There is no interface object registered that supports this IID'
Заранее спасибо.
Windows 10 (20H2), Python 3.9.5, PyWin32 301
Обновление: найден ответ о PyWin32 (pythoncom.CoCreateInstance не может создать IZoneIdentifier; интерфейс также отсутствует в реестре, несмотря на то, что он задокументирован в MSDN). Короче говоря, эти интерфейсы не реализованы. Проверил:
Код: Выделить всё
> import pythoncom
> pythoncom.InterfaceNames
Подробнее здесь: https://stackoverflow.com/questions/679 ... ugh-python
Мобильная версия