Мне действительно понравилось кислородное появление KDE SC 4. Я записал программу для применения этих значков к окнам. Программа записана в NSIS и в настоящее время почти полностью функциональна. Однако единственный способ, которым я нашел для создания Windows, знающего об изменениях значка, состоит в том, чтобы уничтожить explorer.exe, удалить кэш значка и повторно породить explorer.exe. SHChangeNotify
с SHCNE_ASSOCCHANGED
кажется, не может сделать Windows, знающий об изменениях в значке Control Panel, Моем Значке компьютера, и т.д. Предложите, чтобы лучший, менее жестокий подход сделал Windows, знающий об этих изменениях.
Править: Я нашел программу под названием Значок 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$ используется для хранения Shell Icon Size
значение HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics
. Мы затем увеличиваем значение и делаем a SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, 0, SMTO_ABORTIFHUNG, 100000, NULL)
, сопровождаемый декрементом и снова посылают.
Править: В качестве награды это может использоваться в качестве взлома для получения больше (размер Windows 7) значки на рабочем столе на Windows XP. Просто удвойтесь Shell Icon Size
значение и вызов SendMessage
(не выполняйте второе изменение, которое восстанавливает размер),
SystemParametersInfo () имеет параметр SPI_SETICONS, который «перезагружает системные значки» согласно MSDN. Я никогда не пробовал использовать SPI_SETICONS, поэтому не знаю, работает ли он. Если вы хотите протестировать, вы можете использовать что-то вроде
System::Call 'user32::SystemParametersInfo(i 0x0058,i0,i0,i2)i' ;SPI_SETICONS
. Если окажется, что этого недостаточно, вы можете достать большой недокументированный молоток:
Обратите внимание, что это может изменить расположение значков на рабочем столе, даже если функция «Auto Arrange» отключена, и, возможно, другие вещи, которые могут раздражать пользователя!