我为Windows 10编写了一个新的缩略图处理程序。当我将它应用于我的自定义" .mic"文件(重命名" .jpg"文件)处理程序运行良好。但是,出于某种原因,并没有为#34; .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]);
}
当我尝试使用&#34; ThumbnailProvider.exe&#34;来测试我的处理程序时实用程序(随Windows SDK提供),效果很好。我使用&#34; .jpg&#34;运行该实用程序。文件,我的处理程序已成功调用。
为什么我的处理程序不被资源管理器调用?
编辑:
在其他一些PC上,它似乎完美无缺。我的原始注册码运作良好,我的处理程序正在调用&#34; jpg&#34;文件。两台PC都有Windows 10,实际上它们是使用相同基本映像的VM。
编辑:
我注意到我的处理程序正在调用一些&#34; .jpg&#34;文件,在其他文件上它没有。我可能在这里错了,但我在文件中注意到的主要区别是&#34;解决方案单元&#34;属性。对于工作文件,此属性没有值,对于非工作文件,此属性的值为&#34; 2&#34;。我在所有PC上都有同样的行为。
知道这个属性如何影响被调用的缩略图处理程序?如果它不是&#34;解决单位&#34;财产,导致它的区别是什么?
答案 0 :(得分:2)
MSDN says注册新的扩展程序处理程序对象时需要调用SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0)
。
如果您未调用SHChangeNotify,则可能无法识别更改 直到系统重新启动。
在我的机器上,Microsoft处理程序在HKLM\SOFTWARE\Classes\SystemFileAssociations\image
下注册为通用处理程序,我相信该键应该具有较低的优先级,但可能值得调查。正如Simon的评论中所述,shell从HKCR读取,这是一个组合视图,其中HKEY_CURRENT_USER可以覆盖HKEY_LOCAL_MACHINE,因此您还应该确保没有为您的特定用户设置任何内容。
进入semi-documented区域,我们看到资源管理器可以在HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Cached
和HKCU\Software\Microsoft\Windows\CurrentVersion\Shell Extensions\Cached
下缓存一些CLSID信息,因此如果所有其他方法都失败,您可以尝试删除这些密钥(至少在HKCU应该可以安全删除)。
答案 1 :(得分:0)
我想我找到了为什么没有在某些“.jpg”文件上调用我的缩略图处理程序的原因。似乎有些jpg图像里面有嵌入的缩略图。因此,对于这些文件,根本不会调用缩略图处理程序
我使用exiftool
实用程序来读取图像属性,在输出中我看到以下几行:
Photoshop Thumbnail : (Binary data 8015 bytes, use -b option to extract)
Thumbnail Image : (Binary data 8015 bytes, use -b option to extract)
我使用exiftool
从文件中删除缩略图。一旦我这样做,我的处理程序就成功调用了这个图像。