缩略图提供程序无效

Dan*_*Dan 4 c++ com provider windows-shell thumbnails

我正在尝试为自定义文件类型编写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)
Run Code Online (Sandbox Code Playgroud)

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

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

任何有关这方面的帮助将不胜感激!

问候,丹.

小智 5

自从你提到我的博客(codemonkeycodes.com)后,我偶然发现了这一点.

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


更新:

我不能说什么是或不适合你.我刚刚从我的网站下载了样本,按照指示更改了函数S​​TDMETHODIMP 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;
}
Run Code Online (Sandbox Code Playgroud)

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

我希望我可以帮到你.也许你想给我发电子邮件你的代码?