4

我正在尝试为我们的自定义文件类型编写一个 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 文档中的说明在注册表中设置“DesktopProcess”以调试 shell,但我仍然在任务管理器中只看到一个 explorer.exe - 所以“可能”是我不能的原因调试它??

对此的任何帮助将不胜感激!

问候,丹。

4

2 回答 2

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,我有一个漂亮的黑色缩略图。

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

于 2010-05-04T16:06:41.460 回答
1

我有完全相同的问题。我无法制作 SDK 或任何示例作品。我需要 COM 示例,因为我必须调用仅适用于 32 位系统的 Microsoft.Jet.OLEDB.4.0。

我无法完成这项工作: 链接

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

这在 XP 下很好,就像一个魅力: 链接

该节目 Adob​​e 的缩略图存在问题 带有 Office 2007(32 位)的 MS: 链接

于 2010-10-10T12:39:38.323 回答