Ответы с форумов MSDN

Получение эскизов файлов в проводнике

Date: 01.06.2018 15:33:17

Так вам нужно извлечь ту картинку, которая используется как эскиз для файла в проводнике, или любую которая в него впихнута? Для первого существует интерфейс IExtractImage (пример на c#: https://stackoverflow.com/a/1441520/8674428).

Message 449

Date: 04.06.2018 18:27:41

Не очень понимаю смысл этого кода, но выделять изображение путем поиска последовательностей символов в потоке байтов, без анализа позиции в которой они находятся, не выглядит хорошей идеей. Что если в файле случайно окажется такая же последовательность символов в виде текстовой строки? Файлы какого формата вы так пытаетесь обрабатывать?

Кроме того, зачем писать данные в файл только для того, чтобы их сразу же считать в Image? Почему не MemoryStream?

Message 448

Date: 05.06.2018 3:22:57

Понятно, формат недокументированный, и библиотек по работе с ним вроде нет. Ну, для получения картинки я бы все же смотрел в сторону IExtractImage. Хоть и больше кода, но должно быть надежнее.

Message 447

Date: 05.06.2018 8:38:44

Не, у меня код по ссылке работает из коробки. Просто скопировал себе класс ShellThumbnail и пишу так:

ShellThumbnail t = new ShellThumbnail();
pictureBox1.Image = t.GetThumbnail(@"C:\foo\bar\1.xps");

и выводит картинку. Проверял на JPG, WMV, XPS.

Но на самом деле, вам этот способ может и не подойдет. Чтобы он работал, нужно установленное расширение проводника, которое реализует извлечение картинки из файла. Оно, видимо, устанавливается вместе с этим вашим Autodesk Revit, т.е. если на машине он не будет установлен, ничего не будет работать.

Message 446

Date: 05.06.2018 9:39:14

Можно попробовать 

regsvr32 /i shell32.dll


А на какую строку исключение выбивает?




Message 445

Date: 05.06.2018 10:36:08

"А давно Вы занимаетесь Revit - ом?"

Да у меня нет этой проги, поэтому я и могу только гадать, почему ошибка.

"пишете о файлах JPG, WMV
Эти файлы и у меня открываются.
Не открывается только XPS"

Этот метод должен работать для всех типов файлов, для которых зарегистрировано расширение проводника на эскизы. У меня, помимо стандартных для картинок и видео, установлено расширение для XPS (смотрел через прогу ShellExView), поэтому на нем и проверял. 

У меня исключения "Класс не зарегистрирован" вообще ни на один файл не выдает. На некоторые выдает "Операция не реализована". 

"но в какой момент не понятно, в пошаговом режиме не заметно."

Отладчик может глючит из-за того, что сборка Release вместо Debug. Или какие-то настройки отладчика сбиты. При настройках по умолчанию должен автоматически делать останов на исключении и показывать конкретную строку.

Message 444

Date: 05.06.2018 11:10:57

Дело в том, что проводник использует несколько COM-интерфейсов для вытягивания этих эскизов: IExtractImage, IExtractImage2, IThumbnailProvider,  IPreviewHandler (https://stackoverflow.com/a/39397932/8674428). Видимо Autodesk реализует какой-то другой из них.

Автор: VadimTagil

Главная страница - Список тем - Репозиторий на GitHub