5

I have figured out how to change the desktop wallpaper (there are dozens of examples on the Internet.)

One thing that still eludes me: how do I detect when the wallpaper has changed? (Say via the Display control panel or another program changing it.)

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Boogaloo
  • 101
  • 4

2 Answers2

8

Add a message handler for WM_SETTINGCHANGE, SystemEvents.UserPreferenceChanged in .NET. Check if the wallpaper is still the same.

Hans Passant
  • 922,412
  • 146
  • 1,693
  • 2,536
5

Here is an example in C# to retrieve the wallpaper. All you would need to add is some additional code to store the last wallpaper and check to see if it is different.

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

If you were writing something in a non .net language you could use the Win32 API RegNotifyChangeKeyValue function to check to see if this value has changed:

HKEY_CURRENT_USER\Control Panel\Desktop\Wallpaper
Cody Gray - on strike
  • 239,200
  • 50
  • 490
  • 574
Aaron M
  • 2,523
  • 1
  • 23
  • 38