Сделайте кэш значка обновления Windows

Мне действительно понравилось кислородное появление 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 (не выполняйте второе изменение, которое восстанавливает размер),

5
задан Sudarshan S 27 June 2012 в 19:19
поделиться

1 ответ

SystemParametersInfo () имеет параметр SPI_SETICONS, который «перезагружает системные значки» согласно MSDN. Я никогда не пробовал использовать SPI_SETICONS, поэтому не знаю, работает ли он. Если вы хотите протестировать, вы можете использовать что-то вроде

System::Call 'user32::SystemParametersInfo(i 0x0058,i0,i0,i2)i' ;SPI_SETICONS

. Если окажется, что этого недостаточно, вы можете достать большой недокументированный молоток:

  1. Прочтите значение REG_SZ с именем «Размер значка оболочки» в HKEY_CURRENT_USER \ Control Panel \ Desktop \ WindowMetrics (если значение отсутствует, либо отмените, либо используйте 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)

Обратите внимание, что это может изменить расположение значков на рабочем столе, даже если функция «Auto Arrange» отключена, и, возможно, другие вещи, которые могут раздражать пользователя!

5
ответ дан 13 December 2019 в 22:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: