мне удалось программно изменить фоновый рисунок рабочего стола с помощью этого однострочника:Отправить сообщение WM_SETTINGCHANGE обновить рабочий стол
DllCall("user32.dll", "int", "SystemParametersInfo", "int", 20, "int", 0, "str", $CmdLine[1], "int", 0)
& hellip; путем перетаскивания требуемых обоев на скомпилированный скрипт.
У меня есть другая программа, которая меняет рабочий стол, но по какой-то причине не может отправить сообщение WM_SETTINGCHANGE
(я могу видеть, что ключ HKCU\Control Panel\Desktop\Wallpaper
обновляется). Как я могу отправить это сообщение, чтобы вызвать обновление обоев? Есть WM_SETTINGCHANGE
правильное сообщение? Или первый сценарий - единственный способ?
Я попытался это, но он не работает:
DllCall("user32.dll", "lresult", "SendMessage", _
"int", 0xffff, _
"int", 0x001a, _
"int", 0x0014, _
"str", "HKCU\Control Panel")
0xffff
для трансляции сообщения каждого окна, 0x001a
означает WM_SETTINGCHANGE
, 0x0014
код для spi_setdeskwallpaper
. Панель задач в Windows 7 мерцает, но обои не меняются.
Если вы решите мою проблему на C, C++ или Visual Basic, я преобразую ее в AutoIt самостоятельно (мне просто нужны числовые коды вызываемых функций).
К сожалению, это не сработало. Я вижу немного мерцания возле подноса на панели задач, но обои не меняются. Во всяком случае, я нашел эту [крошечную утилиту] (http://windowsxp.mvps.org/wprefresh.exe) (wprefresh.exe), которая, кажется, делает трюк. Когда я вручную меняю «HKCU \ Control Panel \ Desktop \ Wallpaper» и запускаю wprefresh, новые обои становятся видимыми. Я не знаю, какое сообщение он отправляет, он просто работает. Тем не менее, спасибо за ваш интерес. – Marco