1

このワンライナーを使用して、デスクトップの背景をプログラムで変更することができました。

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_SETTINGCHANGE0x0014は のコードですspi_setdeskwallpaper。Windows 7 のタスク バーがちらつきますが、壁紙は変わりません。

C、C++、または Visual Basic で私の問題を解決する場合は、自分で AutoIt に変換します (必要なのは、呼び出された関数の数値コードだけです)。

4

1 に答える 1

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

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

動作するはずです。そうでない場合はお知らせください。この回答を更新できます。

于 2012-06-24T10:12:29.523 に答える