7

Я использую операционную систему Windows 10. Я хотел бы изменить альбом для обоев рабочего стола и слайд-шоу экрана блокировки, используя сценарий или другие программные средства. Я смотрел на изменение настроек regedit , но я не смог найти ничего в regedit которое напрямую ссылается на каталог альбома.

Итак, я посмотрел на HKEY_CURRENT_USER\Control Panel\Desktop и обнаружил, что текущая картинка обоев хранится в %APPDATA%\Microsoft\Windows\Themes\TranscodedWallpaper а элементы слайд-шоу закодированы в slideshow.ini который является скрытым файл в этом каталоге.

Снова я хотел бы найти способ изменить это программно.

1 ответ1

2

Так...Я использую Windows 7. На данный момент, мне кажется, работает следующее:

Сначала вы хотите настроить слайд-шоу так, как вам нужно, затем перейдите и сохраните резервную копию файла.

%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Themes\slideshow.ini

Насколько я могу судить, это кодирует путь к папке альбома. Там может быть способ построить свой собственный, но на данный момент я не знаю.

Я использую PowerShell. Мой PowerShell делает следующее:

Определите функцию для установки обоев на основе кода здесь:

Add-Type @"
using System;
using System.Runtime.InteropServices;
using Microsoft.Win32;
namespace Wallpaper {

   public class Setter {
      public const int SetDesktopWallpaper = 20;
      public const int UpdateIniFile = 0x01;
      public const int SendWinIniChange = 0x02;

      [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
      private static extern int SystemParametersInfo (int uAction, int uParam, string lpvPara, int fuWinIni);

      public static void SetWallpaper (string path) {

         SystemParametersInfo(SetDesktopWallpaper, 0, path, UpdateIniFile | SendWinIniChange);

         RegistryKey key = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop", true);

         //"Fit" style
         key.SetValue(@"WallpaperStyle", "6");
         key.SetValue(@"TileWallpaper", "0");

         key.Close();
      }
   }
}
"@

[Wallpaper.Setter]::SetWallpaper("C:\My\Cool\Pics\monkey.jpg")

Весь код, вероятно, слишком длинный, но суть в следующем:

Установить обои из картинки в слайд-шоу

  1. Установите путь для обоев на "", используя вышеуказанную функцию
  2. Скопируйте резервную копию файла slideshow.ini обратно в этот каталог
  3. Stop-process -name explorer
  4. Спите 1 секунду и запускайте проводник, только если он не перезапустился автоматически

Установить обои из слайд-шоу в одну картинку

  1. Удалите следующие два файла, если они существуют:
    ~\AppData\Roaming\Microsoft\Windows\Themes\slideshow.ini
    ~\AppData\Roaming\Microsoft\Windows\Themes\TranscodedImage.jpg
  1. Установите путь для обоев, используя вышеуказанную функцию
  2. Stop-process -name explorer
  3. Спите 1 секунду и запускайте проводник, только если он не перезапустился автоматически

Что касается кодировки файла slideshow.ini : согласно этому обсуждению на форуме, закодированное поле является "uuencoded PCIDLIST_ABSOLUTE struct". Я не рассматривал это, но, возможно, кто-то может понять, как их создать.

По поводу убийства исследователя. На моей машине проводнику требуется несколько секунд, чтобы запустить слайд-шоу после перезапуска, но, насколько я могу судить, похоже, он работает стабильно. Я попробовал несколько вариантов, но я не мог найти более чистый способ обновления рабочего стола и получения новых настроек. Я вижу в procmon SysInternals, когда explorer.exe читает некоторые из соответствующих записей реестра. Похоже, что во время или после инициализации инициализируется системный трей.

Я не знаю, насколько часто убийственный исследователь часто бывает в вашей системе. Может это очень плохо? Если вы найдете лучший способ, пожалуйста, поделитесь. :)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .