我正在努力处理应用程序文档文件的图标。
首先,我要注册文件扩展名:
HKEY_CLASSES_ROOT\.Ext\(default) = AppName
然后我给它一个 shell 打开命令和一个图标:
HKEY_CLASSES_ROOT\[AppName]\shell\open\command\(default)="path\app.exe"
HKEY_CLASSES_ROOT\[AppName]\DefaultIcon\(default)="path\app.exe",0
图标显示在资源管理器中,但不是原来的图标,而是显示在一张白纸上:
左边是关联文件,右边是可执行文件。
如何设置注册表项才能显示原始图标?
我不知道
DefaultIcon
是否支持路径上的引号,除了注册看起来没问题。
写完这些条目后,您应该调用
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0)
,以便其他应用程序可以自行刷新。
当 shell (
GIL_SIMULATEDOC
) 找不到有效的 DefaultIcon
条目但知道要使用哪个可执行文件时,会生成文档图标。如果您在未注册的情况下使用“打开方式”打开文件类型,则可能会发生这种情况。
尝试拨打
SHChangeNotify
,然后重新启动。如果这不能解决问题,那么您应该在注册表中搜索您的文件扩展名,并将其从 Explorers HKCU FileExts
keys 以及 HKCR 中您的类型的任何“自动”条目中删除。清除 shell 图标缓存也可能有所帮助。
到目前为止,您的问题的一部分尚未被答案涵盖:为什么您的图标显示在一张白纸上,而不是像您预期的那样单独显示?在 Windows 7 下,我观察到这是标准行为:即使对于 Word 文档和 Excel 电子表格也会发生这种情况。但我发现,如果为 DefaultIcon 指定的 .ico 文件仅包含大小为 16、32、48 和 256 的图像,我可以击败它,并强制图标单独显示。这就是 Windows 7 对 GIF 文件的做法,例如,它们使用“C:\Windows\System32\imageres.dll,-71”作为其 DefaultIcon,这是仅具有这些尺寸的图标组。