我正在尝试从我的应用程序中自定义文件夹图标,但由于 Windows 缓存图标和缩略图的方式,我正在努力获取更改后的文件夹以更新它的新图标。
在 Windows 中,我知道有两种自定义文件夹图标的方法,最简单的方法是从 Windows 资源管理器中右键单击文件夹,属性,然后选择自定义选项卡并更改其图标,但这种方法不好,因为它需要手动更改文件夹属性。
我从我的程序做的第二种方法是创建一个desktop.ini文件并将其放在需要更改图标的文件夹中,desktop.ini可以在此处找到有关文档:http : //hwiegman.home.xs4all.nl/desktopini.html和这里有一篇文章:http : //helpdeskgeek.com/how-to/customize-folder-icons-desktop-ini/
如下所示,虽然您可以从文件夹属性中看到图标已更改,但 Windows 中的文件夹图标并未更新,只是 Windows 未显示更新的文件夹图标:
我完全了解 Windows 缓存图标和缩略图,我搜索并阅读了几页关于重建图标缓存的方法,从而让 Windows 显示新更改的图标而不是缓存的图标,但是我无法得到这个在不重新启动 Windows 或 Explorer.exe 进程的情况下从我的应用程序工作,这需要在不中断 Windows 的情况下完成,但因此关闭 Explorer.exe 或要求重新启动绝对不是一种选择。
有趣的是,当从我之前描述的第一种方式更改文件夹图标时,Windows 以某种方式设法刷新和重建图标缓存,因为更改的文件夹会立即更新以显示新图标,但是我看不到 Windows 为实现这一目标做了什么技巧.
我尝试了一些失败的事情,(没有特别的顺序):
ie4uinit.exe -ClearIconCacheSHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);IconCache.db从删除文件AppData\Local"Always show icons, never thumbnails"从注册表中切换Explorer 选项,位于此处:HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced存储在IconsOnly值中HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics存储在Shell Icon Size值中AppData\Local\Microsoft\Windows\Explorer虽然我不确定它们是否有任何帮助,但尝试删除其中一些似乎是不可能的,因为它们可能被锁定等。还尝试结合执行上述一些操作,但没有运气。
当直接从 Windows 资源管理器更改文件夹图标时,使用属性上下文菜单和自定义选项卡,当应用和关闭此对话框时,文件夹图标几乎立即更改,没有关闭 explorer.exe 或重新启动 Windows,更改发生得非常正确离开。
如何以与 Windows 资源管理器相同的方式从我的应用程序中实现这一点?有没有办法找出 Windows 资源管理器如何做到这一点?
我的操作系统是 Windows 10,这可以解释为什么某些旧方法对我不起作用。
我不认为这与图标缓存有任何关系;您只需通知资源管理器该文件夹的图标已更改。您可以使用该SHChangeNotify函数来完成此操作。
LPCWSTR pszFolder = L"c:\\path\\to\\folder";
SHChangeNotify(SHCNE_UPDATEITEM, SHCNF_PATH, pszFolder, NULL);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1396 次 |
| 最近记录: |