使Windows刷新图标caching

我真的很喜欢KDE SC 4的氧气外观。我写了一个程序来将这些图标应用到窗口。 该程序是用NSIS编写的,目前function已经完全正常。 但是,我发现使Windows意识到图标更改的唯一方法是杀死explorer.exe,删除图标caching,并respawn explorer.exe。 SHChangeNotifySHCNE_ASSOCCHANGED似乎无法使Windows意识到对控制面板图标,我的电脑图标等的更改。请build议一个更好,不那么残酷的方法使Windows意识到这些更改。

编辑:我发现了一个名为图标调整程序似乎能够做到这一点,但它是封闭的源,所以我不知道它是如何做到这一点。 (IconTweaker: http ://www.crystalxp.net/galerie/en.id.83-icontweaker.html)

编辑:我有这个工作正常,谢谢安德斯的答复(见下文)。 不过,我只是把我的工作NSIS代码放在这里,以防别人需要它

 ReadRegStr $0 HKCU "Control Panel\Desktop\WindowMetrics" "Shell Icon Size" IntOp $0 $0 + 1 WriteRegStr HKCU "Control Panel\Desktop\WindowMetrics" "Shell Icon Size" $0 SendMessage 0xffff 0x001A 42 0 /TIMEOUT=100000 IntOp $0 $0 - 1 WriteRegStr HKCU "Control Panel\Desktop\WindowMetrics" "Shell Icon Size" $0 SendMessage 0xffff 0x001A 42 0 /TIMEOUT=100000 

$ 0寄存器用于存储HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetricsShell Icon Size值。 然后,我们增加该值,然后执行SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, 0, SMTO_ABORTIFHUNG, 100000, NULL) ,然后进行递减并重新发送。

编辑:作为奖金,这可以用来作为一个黑客得到更大(Windows 7大小)在Windows XP上的桌面图标。 只需加倍Shell Icon Size值并调用SendMessage (不要执行恢复大小的第二个更改)

Solutions Collecting From Web of "使Windows刷新图标caching"

SystemParametersInfo ()有一个名为SPI_SETICONS的参数,根据MSDN“重新加载系统图标”。 我从来没有试过使用SPI_SETICONS,所以我不知道它是否有效,如果你想测试你会使用类似

 System::Call 'user32::SystemParametersInfo(i 0x0058,i0,i0,i2)i' ;SPI_SETICONS 

如果事实证明这是不够的,你可以拿出大的无证锤子:

  1. 读取HKEY_CURRENT_USER \ Control Panel \ Desktop \ WindowMetrics中名为“Shell Icon Size”的REG_SZ值(如果该值不存在,则中止或使用GetSystemMetrics(SM_CXICON))
  2. 从你从第一步得到的数字减去1
  3. 将修改后的条目写回注册表
  4. 调用SendMessageTimeout(HWND_BROADCAST,WM_SETTINGCHANGE,SPI_SETNONCLIENTMETRICS,0,SMTO_ABORTIFHUNG,100000,NULL)
  5. 把你从第一步输入的数字写回注册表
  6. 调用SendMessageTimeout(HWND_BROADCAST,WM_SETTINGCHANGE,SPI_SETNONCLIENTMETRICS,0,SMTO_ABORTIFHUNG,100000,NULL)

请注意,这可能会重新安排桌面图标,即使“自动安排”已关闭,并可能会惹恼用户的其他事情!

你可以运行下面的命令行:

 c:\Windows\System32\ie4uinit.exe -ClearIconCache 

该命令行将删除您的缓存图标,而无需重新启动浏览器