2012-06-23 46 views
1

我设法通过这一个班轮以编程方式更改我的桌面背景:发送WM_SETTINGCHANGE消息刷新桌面

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
#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