使Windows刷新图标缓存
我真的很喜欢KDESC4的氧气外观。我编写了一个程序,将这些图标应用于windows。该程序是用NSIS编写的,目前几乎功能齐全。但是,我发现让Windows知道图标更改的唯一方法是杀死explorer.exe,删除图标缓存,并重新启用explorer.exe使Windows刷新图标缓存,windows,icons,nsis,windows-shell,shell-icons,Windows,Icons,Nsis,Windows Shell,Shell Icons,我真的很喜欢KDESC4的氧气外观。我编写了一个程序,将这些图标应用于windows。该程序是用NSIS编写的,目前几乎功能齐全。但是,我发现让Windows知道图标更改的唯一方法是杀死explorer.exe,删除图标缓存,并重新启用explorer.exeSHChangeNotifywithSHCNE\u ASSOCCHANGED似乎无法让Windows意识到控制面板图标、我的电脑图标等的更改。请建议一种更好、不太残酷的方法让Windows意识到这些更改 编辑:我发现一个名为Icon Twe
SHChangeNotify
withSHCNE\u ASSOCCHANGED
似乎无法让Windows意识到控制面板图标、我的电脑图标等的更改。请建议一种更好、不太残酷的方法让Windows意识到这些更改
编辑:我发现一个名为Icon Tweaker的程序似乎能够做到这一点,但它是封闭源代码,所以我不知道它是如何做到这一点的。(图标:)
编辑:感谢Anders的回复(见下文),我可以很好地完成这项工作。不过,我会把我正在工作的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\u CURRENT\u USER\Control Panel\Desktop\WindowMetrics
的Shell图标大小值。然后,我们增加该值并执行发送消息超时(HWND_广播、WM_设置更改、SPI_设置非客户端度量、0、SMTO_中止、100000、NULL)
,然后递减并重新发送
编辑:作为奖励,这可以作为在Windows XP上获得更大(Windows 7大小)桌面图标的黑客手段。只需将外壳图标大小
值加倍,然后调用发送消息
(不要执行恢复大小的第二次更改)()有一个名为SPI_SETICONS的参数,该参数根据MSDN“重新加载系统图标”。我从来没有尝试过使用SPI_设置图标,所以我不知道它是否有效,如果你想测试,你会使用类似的东西
System::Call 'user32::SystemParametersInfo(i 0x0058,i0,i0,i2)i' ;SPI_SETICONS
如果结果证明这还不够,你可以拿出一把大的无证锤子:
请注意,这可能会重新排列桌面图标,即使“自动排列”处于关闭状态,也可能会出现其他可能会困扰用户的问题 只需运行以下命令行即可:
c:\Windows\System32\ie4uinit.exe -ClearIconCache
该命令行将删除缓存图标,而无需重新启动资源管理器@Sudarshan S:ReadRegStr、IntOp、WriteRegStr、SendMessage 0xffff 0x001A 42 0/TIMEOUT=100000都是内置命令,System::Call'user32::GetSystemMetrics(i 11)i.r0'将为您提供SM_CXICON大小,单位为$0I在C#程序中有类似的问题。你把它弄好了吗?是的。我上面发布的代码(NSIS代码)起到了作用。不确定这是什么作用,但它没有清除图标缓存。