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

时间:2013-10-22 16:39:30

标签: winapi thumbnails

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

3 个答案:

答案 0 :(得分:13)

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

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

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

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

2)使用IThumbnailProvider。将表示所需文件的IThumbnailCache传递给其IShellItem方法以获取图像。

3)使用GetThumbnail()。使用其中一个SHCreateItemFrom...()函数(IShellItemImageFactorySHCreateItemFromIDList()SHCreateItemFromParsingName()SHCreateItemFromRelativeName()SHCreateItemInKnownFolder())获取给定文件的此接口,然后调用它的SHCreateItemWithParent()方法。

答案 1 :(得分: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")

答案 2 :(得分:-1)

这是我能找到的最好的: http://msdn.microsoft.com/en-us/library/windows/desktop/bb774628(v=vs.85).aspx

说真的,至少在XP中应该可用,哦。