Мне очень понравился кислородный вид KDE SC 4. Я написал программу для применения этих значков к окнам. Программа написана на NSIS и в настоящее время практически полностью функционирует. Тем не менее, единственный способ сообщить Windows об изменениях значков - это убить explorer.exe, удалить кэш значков и респаун explorer.exe. SHChangeNotify
с SHCNE_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 Size
HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics
. Затем мы увеличиваем значение и делаем SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, 0, SMTO_ABORTIFHUNG, 100000, NULL)
, за которым следует уменьшение и повторная отправка.
РЕДАКТИРОВАТЬ: В качестве бонуса, это может быть использовано в качестве хака, чтобы получить большие (размер Windows 7) значки рабочего стола на Windows XP. Просто удвойте значение Shell Icon Size
и вызовите SendMessage
(не выполняйте второе изменение, которое восстанавливает размер)