【发布时间】:2018-02-06 14:13:36
【问题描述】:
我为 Windows 10 编写了一个新的缩略图处理程序。当我将它应用于我的自定义“.mic”文件(重命名为“.jpg”文件)时,处理程序运行良好。但是,由于某种原因,根本没有为“.jpg”文件调用处理程序。
这些是我在“DllRegisterServer”期间添加到注册表的条目:
// List of registry entries we want to create
const REGISTRY_ENTRY rgRegistryEntries[] =
{
{ HKEY_LOCAL_MACHINE, L"Software\\Classes\\CLSID\\" SZ_CLSID_MYTHUMBHANDLER, REG_SZ, NULL, SZ_XDRVTHUMBHANDLER },
{ HKEY_LOCAL_MACHINE, L"Software\\Classes\\CLSID\\" SZ_CLSID_MYTHUMBHANDLER L"\\InProcServer32", REG_SZ, NULL, szModuleName },
{ HKEY_LOCAL_MACHINE, L"Software\\Classes\\CLSID\\" SZ_CLSID_MYTHUMBHANDLER L"\\InProcServer32", REG_SZ, L"ThreadingModel", L"Apartment" },
{ HKEY_LOCAL_MACHINE, L"Software\\Classes\\.mic\\ShellEx\\{e357fccd-a995-4576-b01f-234630154e96}" , REG_SZ, NULL, SZ_CLSID_MYTHUMBHANDLER },
{ HKEY_LOCAL_MACHINE, L"Software\\Classes\\.jpg\\ShellEx\\{e357fccd-a995-4576-b01f-234630154e96}" , REG_SZ, NULL, SZ_CLSID_MYTHUMBHANDLER },
};
hr = S_OK;
for (int i = 0; i < ARRAYSIZE(rgRegistryEntries) && SUCCEEDED(hr); i++)
{
hr = CreateRegKeyAndSetValue(&rgRegistryEntries[i]);
}
当我尝试使用“ThumbnailProvider.exe”实用程序(随 windows SDK 提供)测试我的处理程序时,它运行良好。我使用“.jpg”文件运行该实用程序,并成功调用了我的处理程序。
为什么资源管理器没有调用我的处理程序?
编辑:
在其他一些 PC 上,它似乎工作得很好。我的原始注册码运行良好,我的处理程序被调用用于“jpg”文件。两台 PC 都有 Windows 10,实际上它们是使用相同基础映像的虚拟机。
编辑:
我注意到我的处理程序被一些“.jpg”文件调用,而其他文件则没有。我在这里可能错了,但我注意到文件之间的主要区别是“分辨率单元”属性。对于工作文件,此属性没有值,对于非工作文件,此属性的值为“2”。我在所有 PC 上都得到相同的行为。
知道这个属性如何影响被调用的缩略图处理程序吗?如果不是“分辨率单位”属性,可能是什么差异导致它?
【问题讨论】:
-
Software\\Classes\\.jpg 的默认值通常包含“jpegfile”(也可以是其他任何内容),因此 shell 将改为查看 Software\\Classes\\jpegfile,如果那是案子。还要确保 HKCU 不会覆盖任何内容。有关信息,HKCR 是 HKLM+HKCU Software\\Classes 的组合视图。
-
我按照你说的做了,我把它添加到“jpegfile”和“.jpeg”中。我看到所有这些都配置了我在 HKCR 下的处理程序。但是,仍然没有为“.jpg”文件调用我的处理程序。
标签: windows windows-10 thumbnails windows-shell thumbnail-handler