如何检测壁纸何时发生变化(Windows XP或更高版本)?

Boo*_*loo 4 windows desktop-wallpaper wallpaper windows-7

我已经想出了如何更改桌面壁纸(互联网上有几十个例子.)

有一件事我仍然无法理解:如何检测壁纸何时发生变化?(通过显示控制面板或其他程序更改它.)

Han*_*ant 7

在.NET中为WM_SETTINGCHANGE,SystemEvents.UserPreferenceChanged添加消息处理程序.检查壁纸是否仍然相同.


Aar*_*n M 5

这是 C# 中的一个示例来检索壁纸。您只需要添加一些额外的代码来存储最后一张壁纸并检查它是否不同。

RegistryKey wallpaper = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop",false);
string wallpapername = wallpaper.GetValue("wallpaper").ToString();          
wallpaper.Close();
Run Code Online (Sandbox Code Playgroud)

如果您使用非 .net 语言编写内容,则可以使用 Win32 APIRegNotifyChangeKeyValue函数来检查此值是否已更改:

RegistryKey wallpaper = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop",false);
string wallpapername = wallpaper.GetValue("wallpaper").ToString();          
wallpaper.Close();
Run Code Online (Sandbox Code Playgroud)