Forum

Пожалуйста or Регистрация для создания сообщений и тем.

Как поменять обои через реестр не перезагружая ПК

Приветствую!

Хочу сделать программу, которая будет менять обои в зависимости от времени НЕ перезагружая ПК
Есть ключ реестра WallPaper

Путь
СкопированоКомпьютер\HKEY_CURRENT_USER\Control Panel\Desktop

Если я его изменю на другую картинку, то обои поменяются после перезагрузки ПК, пробовал открывать проводник, обновлять рабочий стол, никак
Кто-то знает как избежать перезагрузку ПК?
Наверняка есть способ, ведь винда меняет обои без перезагрузки

У меня есть предположение, то что ключ реестра TranscodedImageCache по тому же пути, надо как-то изменить

Вот, что сделала винда, когда я сменил обои

Картинка
Картинка

[MNotice]Как оформлять свои темы и комментарии  |  Как делать крутые скриншоты[/MNotice]

Приветствую.
Первая ссылка в гугле говорит, что это делается WinAPI функцией СкопированоSystemParametersInfo с СкопированоSPI_SETDESKWALLPAPER в качестве первого аргумента.

Спасибо за ответ, всё работает

Мой код

[DllImport("user32.dll")] // Подключаем .dll WinApi

        static extern void SystemParametersInfo(int uiAction, int uiParam, bool pvParam, int fWinIni); // НАЗВАНИЕ ИМЕННО ТАКОЕ!

        void MainForm_Load(object sender, EventArgs e)
        {
            Method();
        }

        [Flags]
        public enum MouseEventFlags
        {
            SPI_SETDESKWALLPAPER = 0x0014
        }

        void Method()
        {
            using (RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Control Panel\Desktop", true)) // Открываем раздел с доступом на запись
                key.SetValue("WallPaper", @"C:\Kolya\PhotoShop\Мои Проекты\bmw-e46-m3-black-tuning-bmv.png" style="color: #25d39d !important"); // Меняем значение
            SystemParametersInfo((int)MouseEventFlags.SPI_SETDESKWALLPAPER, 0, false, 0);
        }