发送WM_SETTINGCHANGE消息以刷新桌面

时间:2012-06-23 07:58:12

标签: refresh desktop autoit user32

我设法通过这个单行程序以编程方式更改我的桌面背景:

DllCall("user32.dll", "int", "SystemParametersInfo", "int", 20, "int", 0, "str", $CmdLine[1], "int", 0)

...通过将所需壁纸拖放到已编译的脚本上。

我有另一个程序更改了桌面但由于某种原因无法发送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_SETTINGCHANGE0x0014spi_setdeskwallpaper的代码。 Windows 7中的任务栏闪烁但壁纸不会改变。

如果你用C,C ++或Visual Basic解决我的问题,我会自己将它转换为AutoIt(我只需要被调用函数的数字代码)。

1 个答案:

答案 0 :(得分:1)

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

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

应该有效。如果没有,请告诉我,我可以更新这个答案。