gpt4 book ai didi

winapi - 如何在不关闭 explorer.exe 或重新启动 Windows 的情况下重建 Windows 图标缓存?

转载 作者:行者123 更新时间:2023-12-03 00:25:17 25 4
gpt4 key购买 nike

任务

我正在尝试从我的应用程序中自定义文件夹图标,但由于 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 未显示更新的文件夹图标:

enter image description here

我完全了解 Windows 缓存图标和缩略图,我已经搜索并阅读了几页关于重建图标缓存的方法,从而让 Windows 显示新更改的图标而不是缓存的图标,但是我无法得到这个在不重新启动 Windows 或 Explorer.exe 进程的情况下从我的应用程序工作,这需要在不中断 Windows 的情况下完成,但因此关闭 Explorer.exe 或要求重新启动绝对不是一种选择。

有趣的是,当从我之前描述的第一种方式更改文件夹图标时,Windows 以某种方式设法刷新和重建图标缓存,因为更改的文件夹会立即更新以显示新图标,但是我看不到 Windows 为实现这一目标做了什么技巧.

尝试

我尝试了一些失败的事情,(没有特别的顺序):

  • 执行以下操作:ie4uinit.exe -ClearIconCache
  • 在 Lazarus 中运行此代码:SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
  • 删除 IconCache.db文件来自 AppData\Local
  • 切换 "Always show icons, never thumbnails"注册表中的资源管理器选项,位于此处:HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced存储在 IconsOnly 中值(value)
  • 从注册表更改图标大小并返回,位于此处:HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics存储在 Shell Icon Size 中值(value)
  • 此链接在 Delphi 中提供了一个明显的解决方案,但我无法在 Lazarus 中进行转换:http://www.aha-soft.com/faq/q18.htm
  • 我知道这里有缓存的数据库文件:AppData\Local\Microsoft\Windows\Explorer虽然我不确定它们是否有任何帮助,但尝试删除其中一些似乎是不可能的,因为它们可能被锁定等。
  • 重命名文件夹,然后重命名回原始名称。
  • 右键单击 Windows 资源管理器中的空白区域并选择“刷新”似乎也不会更新文件夹图标。

  • 还尝试结合执行上述一些操作,但没有运气。



    当直接从 Windows 资源管理器更改文件夹图标时,使用属性上下文菜单和自定义选项卡,当应用和关闭此对话框时,文件夹图标几乎立即更改,没有关闭 explorer.exe 或重新启动 Windows,更改发生得非常正确离开。

    如何以与 Windows 资源管理器相同的方式从我的应用程序中实现这一点?有没有办法找出 Windows 资源管理器如何做到这一点?

    我的操作系统是 Windows 10,这可以解释为什么某些旧方法对我不起作用。

    最佳答案

    我认为这与图标缓存无关;您只需要通知资源管理器文件夹的图标已更改。您可以使用 SHChangeNotify 执行此操作功能。

    LPCWSTR pszFolder = L"c:\\path\\to\\folder";
    SHChangeNotify(SHCNE_UPDATEITEM, SHCNF_PATH, pszFolder, NULL);

    关于winapi - 如何在不关闭 explorer.exe 或重新启动 Windows 的情况下重建 Windows 图标缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34799147/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com