通知 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注册表;修改壁纸的正确方法是调用SystemParametersInfo
API,传递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);
我编写了一个通过注册表更改 Windows 壁纸的应用程序,但我需要通知 Explorer.exe 才能看到新背景。我尝试使用 SendMessageTimeoutW
:
SendMessageTimeoutW(HWND_BROADCAST, WM_SETTINGCHANGE,
0, 0, SMTO_ABORTIFHUNG, 5000, NULL);
然而,它没有用。我可以使用任何功能吗?
不要为这种设置直接修改windows注册表;修改壁纸的正确方法是调用SystemParametersInfo
API,传递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);