Как восстановить обои рабочего стола Windows в режиме слайд-шоу и Windows Spotlight на C#?C#

Место общения программистов C#
Anonymous
Как восстановить обои рабочего стола Windows в режиме слайд-шоу и Windows Spotlight на C#?

Сообщение Anonymous »

Контекст
У меня есть консольное приложение на .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
Существует ли какой-либо другой API, о котором я не упомянул? Я что-то упустил в настройке слайд-шоу?
Бонусный вопрос: можно ли восстановить режим прожектора Windows для обоев?

Подробнее здесь: https://stackoverflow.com/questions/788 ... light-mode

Вернуться в «C#»