2012-06-23 1 views
1

мне удалось программно изменить фоновый рисунок рабочего стола с помощью этого однострочника:Отправить сообщение 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 самостоятельно (мне просто нужны числовые коды вызываемых функций).

ответ

1
#include <SendMessage.au3> 
#include <WindowsConstants.au3> 

Dim $hWnd = WinGetHandle('[CLASS:Progman]') 
_SendMessage($hWnd, $WM_COMMAND, 0x0001A220) 

Должно работать. Дайте мне знать, если это не так, поэтому я могу обновить этот ответ.

+0

К сожалению, это не сработало. Я вижу немного мерцания возле подноса на панели задач, но обои не меняются. Во всяком случае, я нашел эту [крошечную утилиту] (http://windowsxp.mvps.org/wprefresh.exe) (wprefresh.exe), которая, кажется, делает трюк. Когда я вручную меняю «HKCU \ Control Panel \ Desktop \ Wallpaper» и запускаю wprefresh, новые обои становятся видимыми. Я не знаю, какое сообщение он отправляет, он просто работает. Тем не менее, спасибо за ваш интерес. – Marco