我正在尝试为自定义文件类型编写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 - 所以“可能”就是为什么我不能调试它??
非常感谢任何帮助!
此致 丹。
答案 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)