我正在尝试在Windows API中获取文件的缩略图。我确实找到了一种方法,但代码示例需要最低版本的Windows 8,我更喜欢一种适用于至少7或Vista的方式,最好是在XP中。如果有一种独立于平台的获取缩略图的方法,我宁愿这样做,但我找不到。
答案 0 :(得分:13)
没有一种API适用于所有Windows版本,因为Microsoft不断将缩略图API从一个Windows版本更改为另一个版本。
在Win2K上,包括Vista(不确定更高版本),您可以使用IShellFolder
和SHGetDesktopFolder()
(或IShellFolder::ParseDisplayName()
为文件的父文件夹检索SHParseDisplayName()
在XP及更高版本上),然后使用IShellFolder::GetUIObjectOf()
检索所需的子文件的IExtractImage
界面,然后调用其GetLocation()
方法设置图像大小及其Extract()
方法检索实际图像。
在Vista及更高版本中,您可以:
1)使用IThumbnailProvider
。查询其中一个IInitializeWith...
接口(IInitializeWithStream
,IInitializeWithItem
或IInitializeWithFile
),告诉它您感兴趣的文件,然后调用其{{3}获取实际图像的方法。或者,您可以获得所需文件的GetThumbnail()
,然后调用其IShellItem
方法获取文件BindToHandler
。
2)使用IThumbnailProvider
。将表示所需文件的IThumbnailCache
传递给其IShellItem
方法以获取图像。
3)使用GetThumbnail()
。使用其中一个SHCreateItemFrom...()
函数(IShellItemImageFactory
,SHCreateItemFromIDList()
,SHCreateItemFromParsingName()
,SHCreateItemFromRelativeName()
,SHCreateItemInKnownFolder()
)获取给定文件的此接口,然后调用它的SHCreateItemWithParent()
方法。
答案 1 :(得分:1)
在Win 7系统上使用powershell:
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中应该可用,哦。