У меня есть консольное приложение на .Net 6 C#, которое заменяет обои рабочего стола текущего пользователя на изображение в течение заданного времени. Я делаю резервную копию текущей конфигурации обоев пользователя, читая реестр. По истечении заданного времени я хотел бы восстановить конфигурацию обоев, которую пользователь имел в начале.
Мне удалось восстановить режим изображения и цветовой режим, но мне это не удалось. для восстановления режима слайд-шоу или Windows Spotlight. В идеале я бы хотел, чтобы он работал в Windows 10, 11, Windows Server 2016, 2019 и 2022 (я понимаю, что между этими средами могут быть различия).
Ключи, которые я использую используйте для чтения текущей конфигурации
Код: Выделить всё
HKCU\Control Panel\Desktop\Wallpaper # to read the wallpaper image filepath
HKCU\Control Panel\Desktop\WAllpaperStyle # to read the wallpaper image style (fill, fit ...)
HKCU\Control Panel\Colors\Background # to read the background color
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Wallpapers\BackgroundType # to read the background mode (image, color, slideshow, windows spotlight)
Для восстановления изображения я использовал интерфейс IDesktopWallpaper, а для восстановления цветов я используемые ключи реестра:
Код: Выделить всё
HKCU\Control Panel\Colors\Background # to restore the saved color
HKCU\Control Panel\Desktop\Wallpaper = "" # to not show any image
HKCU\Control Panel\Desktop\WallpaperStyle = 0
HKCU\Control Panel\Desktop\TileWallpaper = 0
Код: Выделить всё
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, null, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
Я попробовал 2 решения: использовать интерфейс IDesktopWallpaper с помощью SetSlideshow() и установить некоторые ключи реестра.
Для IDesktopWallpaper.SetSlideshow я не знаю, как преобразовать список в IShellItemArray. (см. https://learn.microsoft.com/fr-fr/windo ... tslideshow)
Что касается решения реестра, я попробовал устанавливая следующие ключи реестра, но обои просто переключаются из режима изображения в цветовой режим.
Код: Выделить всё
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Wallpapers\SlideshowEnabled = 1 # Activate slideshow mode
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Wallpapers\SlideshowDirectoryPath = "My/Specific/Folder/Path" # Specifies the folder to scan for images
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Wallpapers\SlideshowTickCount = 60000 # Specifies the delay between two images
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Wallpapers\BackgroundType = 2 # Specifies the slideshow mode
HKCU\Control Panel\Personalization\Desktop Slideshow\Interval = 60000 # For any reasons there is an other key to specify the delay between two images
HKCU\Control Panel\Personalization\Desktop Slideshow\Shuffle = 0 # Whether or not images should be displayed in random order
HKCU\Control Panel\Desktop\Wallpaper = "" # to not show any image
HKCU\Control Panel\Desktop\WallpaperStyle = 6 # apparently this could have a role in specifying slideshow mode
HKCU\Control Panel\Desktop\TileWallpaper = 0
Бонусный вопрос: можно ли восстановить режим прожектора Windows для обоев?
Подробнее здесь: https://stackoverflow.com/questions/788 ... light-mode