我正在尝试在 Windows 中获取高分辨率图标或缩略图,并给出该文件的完整路径。不需要是缩略图——一个好看的图标会很棒。我不在乎它是一个HICON
还是一个HBITMAP
:我将把它放在一个 GDI+ 对象中并将它渲染到一个设备上下文中。
我试过使用SHGetFileInfo
(在标志上有各种变化),但从来没有得到超过~32x32 的图标,它可怕地缩放到我需要的 128 像素左右。
if (!SHGetFileInfoW(path, 0, &fi, sizeof(fi),
SHGFI_ICON | SHGFI_ICONLARGE | SHGFI_TYPENAME))
return GetLastError();
// fi.hIcon is a valid icon here, but it's horrible quality with
// a black mask on it. I want higher quality, and dare I dream of
// alpha channel? Mask is acceptable, i suppose.
SHGetFileInfo
""
当我调用时返回SHGFI_ICONLOCATION
(这似乎是该 API 的一个已知问题)。
我也尝试过使用SHCreateItemFromParsingName
name 来获取IThumbnailProvider
,但BindToHandler
总是E_NOTIMPL
返回BHID_ThumbnailHandler
...
IShellItem *psi;
hr = SHCreateItemFromParsingName(path, NULL, IID_PPV_ARGS(&psi));
if (SUCCEEDED(hr))
{
IThumbnailProvider *pThumbProvider;
hr = psi->BindToHandler(NULL, BHID_ThumbnailHandler,
IID_PPV_ARGS(&pThumbProvider));
if (SUCCEEDED(hr))
{
// never get here because hr == E_NOTIMPL !!!
我实际上已经运行了 Microsoft Thumbnail Providers Sample,发现它与BindToInterface
.
那么,关于我还能尝试什么的任何建议?我只是想要一些或多或少代表这个文件的图片-y,例如,至少 100 像素大小 - 只是比 32x32 更好的任何东西......