自定义预览窗格 - 适用于Windows 7,而不适用于Vista

时间:2010-05-11 11:25:22

标签: c++ com windows-explorer preview-pane

我编写了一个资源管理器扩展程序,以在预览窗格中显示我的自定义文件格式。这在Windows 7中运行良好,但似乎在Vista中不起作用。相同的DLL处理缩略图和预览窗格。在Vista和Windows7中,缩略图方面都有效。

将日志添加到我的代码中,Vistas只为缩略图类调用我的DllGetClassObject函数,而不是预览处理程序类。

在调用COM DLL时,有没有明显的Vista与Windows7有什么不同?

以下是我要添加到注册表中的值:

HKEY_CLASSES_ROOT\\.<myext>\\(default) = "<myext>.Thumbnail.Handler.1"
HKEY_CLASSES_ROOT\\<myext>.Thumbnail.Handler.1\\ShellEx\\{8895b1c6-b41f-4c1c-a562-0d564250836f}\\(default) = "<myguid>"
HKEY_CLASSES_ROOT\\CLSID\\<myguid>\\(default) = "<myext> Preview Handler"
HKEY_CLASSES_ROOT\\CLSID\\<myguid>\\DisplayName = "@ExplorerPreviewHandler.dll,-101"
HKEY_CLASSES_ROOT\\CLSID\\<myguid>\\Icon = "@ExplorerPreviewHandler.dll,201"
HKEY_CLASSES_ROOT\\CLSID\\<myguid>\\AppID = "{6d2b5079-2f0b-48dd-ab7f-97cec514d30b}"
HKEY_CLASSES_ROOT\\CLSID\\<myguid>\\InProcServer32\\(default) = "<path to my dll>"
HKEY_CLASSES_ROOT\\CLSID\\<myguid>\\InProcServer32\\ThreadingModel = "Apartment"
HKEY_CLASSES_ROOT\\CLSID\\<myguid>\\InProcServer32\\ProgID = "<myext>.Thumbnail.Handler.1"
HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\PreviewHandlers\\<myguid> = "<myext> Preview Handler"},

鉴于我的DllGetClassObject没有被调用,我认为问题必须与我在注册表中设置的内容有关?我知道DLL导出是可以的,因为它适用于Vista和Win7中的缩略图,适用于Windows7中的预览窗格。

DLL是x64,我的Vista和Win7操作系统也是如此。 DLL是用C ++编写的,没有ATL。

谢谢你对此有任何帮助, 丹。

1 个答案:

答案 0 :(得分:1)

reg看起来很好,只缺少默认的progid。 Win7确实记录了PreviewHandlers键位置的替代行为。不幸的是,SDK文档没有说明Vista需要什么。 Vista时间magazine article使用HKLM而不是HKCU。我打赌就是这样。