我非常喜欢KDE SC 4的外观。我写了一个程序将这些图标应用到Windows上。该程序是用NSIS编写的,目前几乎完全功能正常。然而,我发现让Windows意识到图标更改的唯一方法是杀死explorer.exe,删除图标缓存并重新启动explorer.exe。
编辑:我找到了一个名为Icon Tweaker的程序,它似乎能够做到这一点,但它是闭源的,所以我不知道它是如何做到的。(IconTweaker:http://www.crystalxp.net/galerie/en.id.83-icontweaker.html)
编辑:多亏了Anders的回复(见下文),我已经将其成功运行。然而,我将在此放置我的工作NSIS代码,以防其他人需要它。
编辑:作为奖励,这可以用作在Windows XP上获取更大(Windows 7大小)桌面图标的技巧。只需将Shell Icon Size值加倍并调用SendMessage即可(不要执行第二次更改以恢复大小)。
SHChangeNotify
和SHCNE_ASSOCCHANGED
似乎无法让Windows意识到控制面板图标、我的电脑图标等的更改。请建议更好的、不那么粗暴的方法来让Windows意识到这些更改。编辑:我找到了一个名为Icon Tweaker的程序,它似乎能够做到这一点,但它是闭源的,所以我不知道它是如何做到的。(IconTweaker:http://www.crystalxp.net/galerie/en.id.83-icontweaker.html)
编辑:多亏了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_CURRENT_USER\Control Panel\Desktop\WindowMetrics的Shell Icon Size值。然后,我们会将该值递增,并执行SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, 0, SMTO_ABORTIFHUNG, 100000, NULL),接着进行递减并重新发送。编辑:作为奖励,这可以用作在Windows XP上获取更大(Windows 7大小)桌面图标的技巧。只需将Shell Icon Size值加倍并调用SendMessage即可(不要执行第二次更改以恢复大小)。