通知 Windows Explorer 壁纸已更改

Notify Windows Explorer that a wallpaper has been changed

我编写了一个通过注册表更改 Windows 壁纸的应用程序,但我需要通知 Explorer.exe 才能看到新背景。我尝试使用 SendMessageTimeoutW:

SendMessageTimeoutW(HWND_BROADCAST, WM_SETTINGCHANGE,
                                        0, 0, SMTO_ABORTIFHUNG, 5000, NULL);

然而,它没有用。我可以使用任何功能吗?

不要为这种设置直接修改windows注册表;修改壁纸的正确方法是调用SystemParametersInfoAPI,传递SPI_SETDESKWALLPAPER,在pvParam传递壁纸的路径,在[=]传递SPIF_UPDATEINIFILE | SPIF_SENDCHANGE 14=](使修改永久化)。

正如 Matteo 所建议的,我使用 SystemParametersInfo 函数来设置壁纸,如下所示:

BOOL setDesk = SystemParametersInfoW(SPI_SETDESKWALLPAPER, 0, L"C:\MyWall.jpg", SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);

但它只适用于本地环境,不适用于域环境。我必须通过修改注册表来设置墙纸,然后使用相同的功能来通知 Windows 有关更改:

BOOL setDesk = SystemParametersInfoW(SPI_SETDESKWALLPAPER, 0, 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);