2012-06-23 71 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