我写了一个应用程序,通过注册表更改Windows壁纸,但我需要通知Explorer.exe,以便我可以看到新的背景。我尝试使用SendMessageTimeoutW
:
SendMessageTimeoutW(HWND_BROADCAST, WM_SETTINGCHANGE,
0, 0, SMTO_ABORTIFHUNG, 5000, NULL);
然而,它没有用。我可以使用的任何功能吗?
答案 0 :(得分:2)
不要直接为这种设置修改Windows注册表;修改壁纸的正确方法是调用SystemParametersInfo
API,传递SPI_SETDESKWALLPAPER
,将路径传递到pvParam
中的壁纸和SPIF_UPDATEINIFILE | SPIF_SENDCHANGE
中的fWinIni
(这使得修改成为永久性的。)
答案 1 :(得分:1)
正如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);