如何使用Windows API获取文件缩略图?

Dud*_*awg 10 winapi thumbnails

我正在尝试在Windows API中获取文件的缩略图.我确实找到了一种方法,但代码示例需要最低版本的Windows 8,我更喜欢一种适用于至少7或Vista的方式,最好是在XP中.如果有一种独立于平台的获取缩略图的方法,我宁愿这样做,但我找不到.

Rem*_*eau 14

没有单一的API适用于所有Windows版本,因为Microsoft不断将缩略图API从一个Windows版本更改为另一个版本.

在Win2K上,包括Vista(不确定更高版本),您可以IShellFolder使用SHGetDesktopFolder()IShellFolder::ParseDisplayName()(或SHParseDisplayName()在XP及更高版本)检索文件的父文件夹,然后使用它IShellFolder::GetUIObjectOf()来检索所需的子文件的IExtractImage界面,然后调用其GetLocation()方法设置图像大小及其Extract()方法以检索实际图像.

在Vista及更高版本中,您可以:

1)使用IThumbnailProvider.查询它的一个IInitializeWith...接口(IInitializeWithStream,IInitializeWithItemIInitializeWithFile),告诉它你感兴趣的文件,然后调用它的GetThumbnail()方法来获取实际的图像.或者,您可以获取IShellItem所需文件,然后调用其BindToHandler方法以获取文件IThumbnailProvider.

2)使用IThumbnailCache.将IShellItem表示所需文件的代码传递给其GetThumbnail()方法以获取图像.

3)使用IShellItemImageFactory.使用的一个SHCreateItemFrom...()功能(SHCreateItemFromIDList(),SHCreateItemFromParsingName(),SHCreateItemFromRelativeName(),SHCreateItemInKnownFolder(),SHCreateItemWithParent()),以获得该接口对于给定的文件,则调用它的GetImage()方法.


Dav*_*vid 1

在Win 7系统上使用

PS> $myimage = [System.Drawing.Image]::FromFile("c:\image.jpg");
PS> $mythumb = $myimage.GetThumbnailImage(72, 72, $null, [intptr]::Zero);
PS> $mythumb.Save("c:\thumb.jpg")
Run Code Online (Sandbox Code Playgroud)