Доступ к миниатюрам, которые не существуют

Я сделал приложение, которое представляет вам список файлов на вашем компьютере. Каждый раз, когда вы щелкаете по любому элементу в списке, рядом с ним в небольшом блоке PictureBox должен отображаться эскиз соответствующего файла. Я использую C # на Windows 7.

Чтобы получить миниатюру, я обратился к методу, опубликованному в другом вопросе. Сначала я ссылаюсь на пакет Windows API Code. Затем я использую следующий код:

ShellFile shellFile = ShellFile.FromFilePath(fullPathToFile);
myPictureBox.Image = shellFile.Thumbnail.LargeBitmap;

Это не всегда работает. Иногда показанное миниатюра является просто «приложением по умолчанию»; значок. Я обнаружил, что настоящий эскиз отображается только в том случае, если Windows ранее сгенерировала эскиз для этого файла и сохранила его в кэше миниатюр. Это означает, что мне нужно вручную открыть папку, подождать, пока Windows создаст миниатюры для каждого файла, и тогда мое приложение сможет увидеть эти большие пальцы.

Как моя программа может заставить Windows 7 создавать реальные миниатюры перед их использованием?

Update (by Li0liQ)

Можно принудительно получить эскиз, добавив FormatOption:

ShellFile shellFile = ShellFile.FromFilePath(fullPathToFile);
shellFile.Thumbnail.FormatOption = ShellThumbnailFormatOption.ThumbnailOnly;
myPictureBox.Image = shellFile.Thumbnail.LargeBitmap;

тем не менее, я получаю исключение в случае, если миниатюры еще нет:

The current ShellObject does not have a valid thumbnail handler or there was a problem in extracting the thumbnail for this specific shell object. ---> System.Runtime.InteropServices.COMException: Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))

УвидетьКак обновить миниатюру файла в проводнике Windows? вопрос и кодотрывок для потенциальных подсказок.

Ответы на вопрос(4)

Ваш ответ на вопрос