5

我真的很喜欢 KDE SC 4 的氧气外观。我编写了一个程序来将这些图标应用于窗口。该程序是用 NSIS 编写的,目前几乎可以完全发挥作用。但是,我发现让 Windows 知道图标更改的唯一方法是杀死 explorer.exe,删除图标缓存,然后重新生成 explorer.exe。SHChangeNotifywithSHCNE_ASSOCCHANGED似乎无法让 Windows 了解对控制面板图标、我的电脑图标等的更改。请建议一种更好、不那么残酷的方法来让 Windows 了解这些更改。

编辑:我发现一个名为 Icon Tweaker 的程序似乎能够做到这一点,但它是封闭源代码,所以我不知道它是如何做到的。(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 寄存器用于存储 的Shell Icon SizeHKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics。然后我们增加值并执行 a SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, 0, SMTO_ABORTIFHUNG, 100000, NULL),然后减少并重新发送。

编辑:作为奖励,这可以用作在 Windows XP 上获得更大(Windows 7 大小)桌面图标的技巧。只需将值加倍Shell Icon Size并调用SendMessage(不要执行恢复大小的第二次更改)

4

2 回答 2

7

您只需运行以下命令行:

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

该命令行将删除您的缓存图标,而无需重新启动资源管理器

于 2013-12-18T13:52:51.033 回答
5

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)

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

于 2010-07-14T08:36:48.863 回答