Так...Я использую 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")
Весь код, вероятно, слишком длинный, но суть в следующем:
Установить обои из картинки в слайд-шоу
- Установите путь для обоев на "", используя вышеуказанную функцию
- Скопируйте резервную копию файла
slideshow.ini
обратно в этот каталог
Stop-process -name explorer
- Спите 1 секунду и запускайте проводник, только если он не перезапустился автоматически
Установить обои из слайд-шоу в одну картинку
- Удалите следующие два файла, если они существуют:
~\AppData\Roaming\Microsoft\Windows\Themes\slideshow.ini
~\AppData\Roaming\Microsoft\Windows\Themes\TranscodedImage.jpg
- Установите путь для обоев, используя вышеуказанную функцию
Stop-process -name explorer
- Спите 1 секунду и запускайте проводник, только если он не перезапустился автоматически
Что касается кодировки файла slideshow.ini
: согласно этому обсуждению на форуме, закодированное поле является "uuencoded PCIDLIST_ABSOLUTE struct". Я не рассматривал это, но, возможно, кто-то может понять, как их создать.
По поводу убийства исследователя. На моей машине проводнику требуется несколько секунд, чтобы запустить слайд-шоу после перезапуска, но, насколько я могу судить, похоже, он работает стабильно. Я попробовал несколько вариантов, но я не мог найти более чистый способ обновления рабочего стола и получения новых настроек. Я вижу в procmon SysInternals, когда explorer.exe читает некоторые из соответствующих записей реестра. Похоже, что во время или после инициализации инициализируется системный трей.
Я не знаю, насколько часто убийственный исследователь часто бывает в вашей системе. Может это очень плохо? Если вы найдете лучший способ, пожалуйста, поделитесь. :)