【问题标题】:How to refresh the folder icon instantly in Windows如何在 Windows 中立即刷新文件夹图标
【发布时间】:2017-08-28 14:49:11
【问题描述】:

我现在正在编写一个小工具,需要立即刷新文件夹图标。
众所周知,在 Windows 中,我们可以通过以下步骤手动修改文件夹图标:

  1. 右键单击文件夹
  2. 选择“自定义”标签
  3. 点击“更改图标”

我也知道如何设置 desktop.ini 文件来修改它的图标。但是刷新确实需要很长时间(大约 30 秒)。

我想知道是否有一种通用的方法可以立即解决它,无论是使用 C/C++ 还是脚本。还是 Windows 从不提供方法?

如果可能,欢迎任何代码。

【问题讨论】:

  • 请详细说明。不确定您指的是哪个“文件夹图标”。
  • 当您在Windows中右键单击任何文件夹时,您可以通过选择“自定义”标签、“更改图标”来设置其图标。我只是想要一种通用的方式来自动实现它。
  • edit您的问题并在那里进行说明。
  • 我已经修改过了。

标签: c++ c winapi


【解决方案1】:

这个小 C 程序可以完成这项工作:

#include <windows.h>
#include <ShlObj.h>

const char folderpath[] = "C:\\Your-Folder";

int main() {
  SHChangeNotify(SHCNE_UPDATEITEM, SHCNF_PATH, folderPath, NULL);
}

folderpath 是要更新其图标的文件夹的完整路径 以下操作顺序在这里可以正常工作(Windows 10 64 位):

Desktop.ini 文件

[.ShellClassInfo]
IconResource=C:\Windows\System32\SHELL32.dll,12
  1. 创建文件夹 X
  2. 将上面的 Desktop.ini 文件复制到文件夹中。 X文件夹的图标不会改变
  3. 运行上面的小C程序
  4. 新图标显示在 X 文件夹中
  5. 删除在第 2 点创建的 Deskop.ini 文件。X 文件夹的图标不会改变
  6. 运行上面的小C程序
  7. X文件夹上显示原来的文件夹图标

查看SHChangeNotify函数了解更多详情。

【讨论】:

  • 感谢您的详细解决方案!我会试一试。再次感谢。
  • @NekoGong 如果可行,别忘了accept 答案,让其他读者知道这是您问题的正确解决方案。
  • SHChangeNotify(SHCNE_UPDATEITEM, SHCNF_PATH, folderPath, NULL); 够用的话值得一试。应该比只更改一个图标时使整个图标缓存无效更有效。发现于OldNewThing
  • 昨天我玩了SHCNE_UPDATEITEM,但无法获得一致的结果。有时它会更新文件夹图标,有时不会。我还尝试添加SHCNF_FLUSHSHCNE_UPDATEDIR,但结果仍然不可靠。
  • 我做了一些进一步的测试,发现所谓的“包罗万象”SHCNE_ASSOCCHANGED 也不可靠。但SHGetSetFolderCustomSettings() 总是立即更新图标(尽管自 Win XP SP3 以来已弃用 API)!
猜你喜欢
  • 2011-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-19
  • 2013-08-07
  • 1970-01-01
  • 2012-08-03
  • 1970-01-01
相关资源
最近更新 更多