C #: получение больших миниатюр / превью файлов вместо больших значков с использованием SHGetImageList и SHGetFileInfo, таких как Windows Explorer - PullRequest
3 голосов
/ 08 июля 2011

Я использую C #, Windows Forms, Net 2.0.

Я использую SHGetImageList для получения списка системных образов, скажем, с параметром SHIL_JUMBO, и для получения больших изображений 256x256 в Windows 7.

[DllImport(SHELL32, EntryPoint = "#727")]
public static extern int SHGetImageList(int imageList, ref Guid riid, ref IntPtr handle);

public static IntPtr Get(SystemImageListType type)
{
    IntPtr handle = IntPtr.Zero;
    NativeMethods.SHGetImageList((int)type, ref NativeMethods.IIDImageList, ref handle);
    return handle;
}

Я также использую

NativeMethods.SendMessage(listView.Handle, LVM_SETIMAGELIST, LVSIL_NORMAL, imageListHandle);

, чтобы установить системный список изображений для моего списка, и

public static int GetFileIconIndex(string pathName)
{
    NativeMethods.SHFILEINFO shfiData = new NativeMethods.SHFILEINFO();

    NativeMethods.SHGetFileInfo(
        pathName,
        0,
        ref shfiData,
        Marshal.SizeOf(typeof(NativeMethods.SHFILEINFO)),
        NativeMethods.SHGFI.SYSICONINDEX |
        NativeMethods.SHGFI.LARGEICON |
        NativeMethods.SHGFI.ICON );
    return shfiData.iIcon;
}

для получения индекса значков различных файлов / папок, загруженных в просмотр списка.

Все работает отлично, за исключением того, что я получаю большие 256 значков даже для фильмов или файлов изображений, где я ожидаю миниатюру (предварительный просмотр изображения / фильма), как в Windows Explorer.

Как получить миниатюры, а не значки файлов, которые отображаются в виде миниатюр в проводнике Windows?

1 Ответ

2 голосов
/ 08 июля 2011

В Windows Vista и выше вы можете использовать интерфейс IThumbnailProvider .

Для этого есть Windows API Code Pack .

Для XP существует другой интерфейс, см. Это: http://www.vbaccelerator.com/home/NET/Code/Libraries/Shell_Projects/Thumbnail_Extraction/Thumbail_Tester_Code_zip_ThumbnailTester/ThumbnailCreator_cs.asp

Очевидно, вы должны решить, какие файлы будут использовать значки списка системных изображений, а какие - эскизы.

...