Programe a mudança do papel de parede do Windows XP sem aplicativos adicionais

5

Idealmente, eu gostaria de poder fazer isso através de um arquivo em lote ou um script VB, para que eu possa agendar para que ele seja executado em diferentes momentos do dia (papel de parede escuro à noite vs. papel de parede claro no dia). / p>

Estou ciente dos muitos aplicativos que podem fazer isso, mas prefiro manter apenas os aplicativos necessários em execução em segundo plano.

    
por tkf144 19.10.2009 / 04:09

4 respostas

6

Você pode usar tarefas agendadas junto com este VBScript que acabei de hackear (isso é para usar vários papéis de parede e alternar a cada poucos minutos, por exemplo):

Randomize
Set obshell = WScript.CreateObject("Wscript.Shell")
num = Int( ( 100 - 1 + 1 ) * Rnd + 1 )
CurrentDir = "C:\Wallpapers\day\"
wallpaper = CurrentDir & "Wallpaper" & num & ".bmp"
obshell.RegWrite "HKCU\Control Panel\Desktop\Wallpaper",wallpaper
obshell.Run "%windir%\System32\RUNDLL32.EXE user32.dll,
UpdatePerUserSystemParameters",1,False
Set obshell = Nothing

Observação : os papéis de parede devem ser bitmaps. Se você quiser evitar mais scripts para verificar a hora do sistema periodicamente, você pode usar o mesmo script para a noite e o dia, basta fazer uma tarefa agendada separada e executá-la no horário desejado no intervalo desejado. Faça 2 pastas, uma para papéis de parede do dia e outra para papéis de parede nocturnos, coloque uma cópia do script em cada uma delas. Você precisará alterar o 100 na linha 3 para quantos papéis de parede estiverem em cada um e renomeá-los para Wallpaper1, Wallpaper2, etc para esse script funcionar (ou modificar o nome no script). Modifique também o valor CurrentDir para cada.

Se você quiser usar apenas dois papéis de parede (configure-o para ser executado a cada 59 minutos ou mais para garantir que você não perca uma hora):

Set obshell = WScript.CreateObject("Wscript.Shell")
CurrentHour = Hour(Now)
If CurrentHour = 8 Then
    wallpaper = "C:\Wallpapers\day.bmp"
ElseIf CurrentHour = 20 Then
    wallpaper = "C:\Wallpapers\night.bmp"
Else
    WScript.Quit(0)
End If
obshell.RegWrite "HKCU\Control Panel\Desktop\Wallpaper",wallpaper
obshell.Run "%windir%\System32\RUNDLL32.EXE user32.dll,
UpdatePerUserSystemParameters",1,False
Set obshell = Nothing
    
por 19.10.2009 / 04:43
3

EDIT: A resposta de João mostra um roteiro completo. Meu +1 vai para ele. Este post se torna apenas mais uma opção que você pode querer analisar.

Estou um pouco enferrujado nos comandos em lote, por isso vou dar-lhe os destaques:

%TIME:~0,2% - fornecerá a hora atual em sua variável de ambiente TIME

Então, algo assim:

IF %TIME:~0,2% == 19 CALL do_Night_Wallpaper.reg
IF %TIME:~0,2% == 07 CALL do_Day_Wallpaper.reg

Seria suficiente que um script fosse colocado no agendador de tarefas e definido para ser executado a cada 1 hora. Claro, você pode querer ajustar as horas para o seu nível de conforto do fuso horário. Enquanto isso, as instruções IF são escritas para que não chamam desnecessariamente os arquivos reg. Mas isso significa que você precisa configurar o agendador de tarefas para executá-lo uma vez a cada hora, pelo menos.

Quanto aos próprios arquivos reg, estas são as configurações que você procura:

  • HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Policies \ Sistema \ Wallpaper
  • HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Policies \ System \ WallpaperStyle

O primeiro obtém um caminho completo para a imagem do papel de parede. O segundo é um inteiro 0 = centrado, 1 = lado a lado, 2 = esticado.

    
por 19.10.2009 / 04:45
1

Aqui está um pequeno programa VBS "pronto para ser usado": reúne todos esses comandos (seleção de um arquivo de imagem aleatória em um diretório usando o comando "Randomize" VBS + atualiza o papel de parede do Windows com ele usando "UpdatePerUserSystemParameters" + atualizar o registro "WallpaperStyle" do Windows).

E ele funciona com arquivos de imagem .JPG (não apenas arquivos .BMP), o que é bastante conveniente ...

O código-fonte do script VB é descrito no link Obrigado.

    
por 29.04.2010 / 13:43
1

Eu apenas tento adicionar temperos menores ao roteiro de John. Eu tento fazer o script capaz de mudar o papel de parede uma vez a cada minuto de acordo com a hora do dia. Por exemplo, de 5,00 a 8,59, ele altera vários papéis de parede com o tema da manhã; das 9.00 às 13.59, muda vários papéis de parede com o tema do meio-dia; e assim por diante. Todo tema neste script contém 4 imagens BMP. Como há cinco temas incluídos no roteiro (manhã, meio dia, tarde, noite e noite), serão necessárias 20 imagens para que esse script funcione.

'creating procedure that changes wallpaper every minute
Sub ChangeWallpaperPerMinute ()
    Set obshell = WScript.CreateObject("Wscript.Shell")
    CurrentHour = Hour(Now)
    'determining the number of images for every time of the day-based theme (set the 'maximum' value according to the number of images for every theme)
    maximum=4
    minimum=1
    'randomizing the images to be changed
    Randomize
    num = Int((maximum-minimum+1)*Rnd+minimum)
    If CurrentHour >= 5 And CurrentHour <= 8 Then
        wallpaper = "morning" & num & ".bmp"
    ElseIf CurrentHour >= 9 And CurrentHour <= 13 Then
        wallpaper = "midday" & num & ".bmp"
    ElseIf CurrentHour >= 14 And CurrentHour <= 16 Then
        wallpaper = "afternoon" & num & ".bmp"
    ElseIf CurrentHour >= 17 And CurrentHour <= 20 Then
        wallpaper = "evening" & num & ".bmp"
    ElseIf CurrentHour >= 21 And CurrentHour <= 23 Then
        wallpaper = "night" & num & ".bmp"
    ElseIf CurrentHour >= 0 And CurrentHour <= 4 Then
        wallpaper = "night" & num & ".bmp"
    Else
        WScript.Quit(0)
    End If
    obshell.RegWrite "HKCU\Control Panel\Desktop\Wallpaper",wallpaper
    obshell.Run "%windir%\System32\RUNDLL32.EXE user32.dll, UpdatePerUserSystemParameters",1,False
    Set obshell = Nothing
End Sub
'end of procedure creation'
'calling procedure to initiate script's action
ChangeWallpaperPerMinute
'repeating the calling of procedure
do
    WScript.sleep(60 * 1000)
    '60 * 1000 means sixty seconds. If the shifting of wallpapers is expected to occur once every ten seconds, change to 10 * 1000
    'calling procedure
    ChangeWallpaperPerMinute
Loop

Para tornar este script operável, além do próprio arquivo de script, são necessárias 20 imagens BMP. Quatro dessas imagens devem ser nomeadas de acordo com a nomenclatura especificada; isto é, por exemplo, morning1.bmp, morning2.bmp, morning3.bmp e morning4.bmp. A mesma nomenclatura também se aplica à nomeação de 4 imagens do meio-dia, 4 imagens da tarde, 4 imagens noturnas e 4 imagens noturnas. Coloque o arquivo VBS junto com os 20 arquivos de imagem em uma pasta. Como esse script chama repetidamente seu procedimento em intervalos especificados, ao usar tarefas agendadas, certifique-se de ativar esse script apenas no logon do sistema. Para desativar esse script, apenas mate wscript.exe usando o gerenciador de tarefas.

    
por 10.03.2012 / 17:19