Então ... estou usando o Windows 7. Por enquanto, o seguinte parece estar funcionando para mim:
Primeiro, você deseja configurar a apresentação de slides como quiser e, em seguida, salvar um backup do arquivo
%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Themes\slideshow.ini
Tanto quanto eu posso dizer, isso codifica o caminho da pasta do álbum. Pode haver uma maneira de construir o seu próprio, mas neste momento eu não sei.
Estou usando o powershell. Meu powershell faz o seguinte:
Defina uma função para definir o papel de parede com base no código aqui :
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")
O código total é provavelmente muito longo, mas a essência é a seguinte:
Definir papel de parede da imagem para apresentação de slides
- Defina o caminho do papel de parede para "" usando a função acima
- Copie o arquivo
slideshow.ini
do backup de volta para esse diretório -
Stop-process -name explorer
- Dormir 1 segundo e iniciar o explorador somente se não tiver reiniciado automaticamente
Definir papel de parede de apresentação de slides para imagem única
- Exclua os dois arquivos a seguir, se existirem:
~\AppData\Roaming\Microsoft\Windows\Themes\slideshow.ini ~\AppData\Roaming\Microsoft\Windows\Themes\TranscodedImage.jpg
- Defina o caminho do papel de parede usando a função acima
-
Stop-process -name explorer
- Dormir 1 segundo e iniciar o explorador somente se não tiver reiniciado automaticamente
Com relação à codificação do arquivo slideshow.ini
: de acordo com esta conversa no fórum , o campo codificado é uma" estrutura PCIDLIST_ABSOLUTE uuencoded ". Eu não olhei para isso, mas talvez alguém possa descobrir como criá-los.
Sobre matar o explorador. Leva alguns segundos na minha máquina para o explorador iniciar a apresentação de slides após a reinicialização, mas, até onde eu sei, ela parece funcionar consistentemente. Eu tentei várias alternativas, mas não consegui descobrir uma maneira mais limpa de atualizar a área de trabalho e obter as novas configurações. Eu posso ver no procmon SysInternals quando explorer.exe lê algumas das entradas do Registro relevantes. Parece que é durante o ish ou after-ish inicializando a bandeja do sistema.
Eu não sei o quão ruim matar o explorador é para o seu sistema. Talvez seja muito ruim? Se você encontrar uma maneira melhor, por favor, compartilhe. :)