c++ - 自定义预览面板 - 适用于 Windows 7,不适用于 Vista

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

我编写了一个资源管理器扩展来在预览 Pane 中显示我的自定义文件格式。这在 Windows 7 中工作正常,但在 Vista 中似乎不起作用。同一个 DLL 处理缩略图和预览 Pane 。缩略图方面的功能在 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 中的预览 Pane 。

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

感谢您对此的任何帮助, 丹.

最佳答案

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

关于c++ - 自定义预览面板 - 适用于 Windows 7,不适用于 Vista,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2810212/

相关文章:

c++ - 函数的返回值如何工作?

c++ - 在 C++ 代码中使用 Windows 的 native 程序打开文件

visual-studio - VS解决方案文件的Windows资源管理器上下文菜单中的"Build"项目?

android - 在 Android 文件浏览器中可见时无法在 Windows 资源管理器中看到文件

c++ sub 获取当前目录下的所有exe文件

c++ - 如何正确创建单例对象并在 C++ 中使用它?

java - 使用 Java 增强 C++ Eclipse

c - 如何获得某些 Visual Basic 6 控件的 IUnknown* 指针(如果有)?

c++ - MSHTML:图像插入回调

c++ - 如何以编程方式启用/禁用 Windows 功能