缩略图提供程序无效

时间:2010-04-29 14:02:19

标签: c++ com thumbnails provider windows-shell

我正在尝试为自定义文件类型编写Windows资源管理器缩略图处理程序。我已经将这个工作正常用于预览窗格,但我无法使其适用于缩略图。

Windows似乎甚至没有尝试调用DllGetClassObject入口点。

在继续之前,请注意我使用的是Windows 7和非托管C ++。

我在注册表中注册了以下值:

HKCR\CLSID\<my guid>
HKCR\CLSID\<my guid>\InprocServer32 (default value = path to my DLL)
HKCR\CLSID\<my guid>\InprocServer32\ThreadingModel (value = "Apartment")
HKCR\.<my ext>\shellex\{E357FCCD-A995-4576-B01F-234630154E96} (value = my guid)

我也尝试过使用Win SDK示例,但这不起作用。还有本文中的示例项目(http://www.codemonkeycodes.com/2010/01/11/ithumbnailprovider-re-visited/),但这不起作用。

我是shell编程的新手,所以不太确定调试它的最佳方法。我已经尝试将调试器附加到explorer.exe,但这似乎不起作用(断点被禁用,并且我的OutputDebugStrings都没有显示在输出窗口中)。请注意,我尝试在WinSDK文档中描述的用于调试shell的注册表中设置“DesktopProcess”,但我仍然只在任务管理器中看到一个explorer.exe - 所以“可能”就是为什么我不能调试它??

非常感谢任何帮助!

此致 丹。

2 个答案:

答案 0 :(得分:5)

因为你提到了我的博客(codemonkeycodes.com),我偶然发现了这个。

您对我的样品有什么问题?您是否使用regsvr32注册了DLL?您使用的是什么版本的Windows 7,32或64?


更新

我不能说什么对你不利。我刚刚从我的网站下载了样本,按照说明进行了更改 STDMETHODIMP CThumbnailProvider :: GetThumbnail ...看起来像

{
*phbmp = NULL;
*pdwAlpha = WTSAT_UNKNOWN;

ULONG_PTR token;
GdiplusStartupInput input;
if (Ok == GdiplusStartup(&token, &input, NULL))
{
    //gcImage.LogBuffer();
    Bitmap * pBitmap = new Bitmap(188, 141);
    if( pBitmap )
    {
        Color color(0, 0, 0);
        pBitmap->GetHBITMAP(color, phbmp);
    }
}

GdiplusShutdown(token);

if( *phbmp != NULL )
    return NOERROR;

return E_NOTIMPL;
}

我注册了DLL,然后用适当的扩展名创建了一个新文件,而tada,我有一个漂亮的黑色缩略图。

我希望我能帮到你。也许你想给我发电子邮件你的代码?

答案 1 :(得分:1)

我的问题完全相同。我不能使SDK或任何样本工作。我需要COM示例,因为我必须调用Microsoft.Jet.OLEDB.4.0,它只适用于32位系统。

我无法做到这一点: link

如果在编译时指定了AnyCPU,则此方法有效。无法使其适用于x86: link

这很不错,在XP下就像魅力一样: link

此节目Adobe在使用Office 2007(32位)缩略图时遇到问题: link