5

В идеале я хотел бы иметь возможность сделать это с помощью пакетного файла или сценария VB, чтобы я мог запланировать его запуск в разное время дня (темные обои ночью или светлые обои днем).

Мне известно о многих приложениях, которые могут это делать, но я предпочитаю, чтобы в фоновом режиме работали только необходимые приложения.

4 ответа4

6

Вы можете использовать запланированные задания вместе с этим VBScript, который я только что взломал (это для использования нескольких обоев и переключения, например, каждые несколько минут):

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

Примечание: обои должны быть растровыми. Если вы хотите избежать дополнительных сценариев для периодической проверки системного времени, вы можете использовать один и тот же сценарий для дня и ночи, просто сделайте отдельное запланированное задание и запустите его в нужное время с нужным интервалом. Сделайте 2 папки, одну для дневных обоев и одну для ночных обоев, поместите в каждую копию сценария Вам нужно изменить 100 в строке 3, чтобы количество обоев было в каждом, и переименовать их в Wallpaper1, Wallpaper2, etc Чтобы этот сценарий работал (или измените имя в сценарии). Также измените значение CurrentDir для каждого.

Если вы хотите использовать только 2 обои (установите их запускать каждые 59 минут или около того, чтобы не пропустить час):

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
3

РЕДАКТИРОВАТЬ: Джон ответ показывает вам полный сценарий. Мой +1 идет к нему. Этот пост станет еще одним вариантом, который вы можете посмотреть.

Я немного подзабыл командные команды, поэтому я собираюсь дать вам основные моменты:

%TIME:~0,2% - даст вам текущий час в вашей переменной окружения TIME

Так что-то вроде этого:

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

Было бы достаточно поместить скрипт в планировщик задач и настроить его запуск каждые 1 час. Конечно, вы можете настроить часы на уровень комфорта вашего часового пояса. Между тем операторы IF написаны так, что они не вызывают ненужные файлы reg. Но это означает, что вы должны настроить планировщик задач так, чтобы он запускался хотя бы раз в час.

Что касается самих reg-файлов, то вам нужны следующие настройки:

  • HKEY_CURRENT_USER\ Программное обеспечение \ Microsoft \ Windows \ CurrentVersion \ Policies \ System \ Wallpaper
  • HKEY_CURRENT_USER\ Программное обеспечение \ Microsoft \ Windows \ CurrentVersion \ Policies \ System \ WallpaperStyle

Первый получает полный путь к изображению обоев. Второе - целое число 0 = по центру, 1 = плиточный, 2 = растянутый.

1

Я просто пытаюсь добавить незначительные приправы к сценарию Джона. Я стараюсь сделать скрипт способным менять обои раз в минуту в зависимости от времени суток. Например, с 5.00 до 8.59, он меняет несколько обоев с утренней темой; с 9.00 до 13.59 меняет несколько обоев с темой полудня; и так далее. Каждая тема в этом сценарии содержит 4 изображения BMP. Поскольку в сценарий включены пять тем (утро, полдень, день, вечер и ночь), для работы этого сценария потребуется 20 изображений.

'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

Чтобы сделать этот сценарий работоспособным, в дополнение к самому файлу сценария также необходимы 20 изображений BMP. Четыре из этих изображений должны быть названы в соответствии с указанной номенклатурой; это, например, morning1.bmp, morning2.bmp, morning3.bmp и morning4.bmp. Та же самая номенклатура также применяется к именованию 4 полуденных изображений, 4 дневных изображений, 4 вечерних изображений и 4 ночных изображений. Поместите файл VBS вместе с 20 файлами изображений в одну папку. Поскольку этот сценарий неоднократно вызывает свою процедуру с заданными интервалами, при использовании запланированных задач убедитесь, что этот сценарий активируется только при входе в систему. Чтобы деактивировать этот скрипт, просто убейте wscript.exe с помощью диспетчера задач.

1

Вот небольшая программа VBS, "готовая к использованию": она собирает все эти команды (выбор файла случайного изображения в каталоге с помощью команды "Randomize" VBS + обновление обоев Windows с помощью "UpdatePerUserSystemParameters" + обновление Windows Реестр "WallpaperStyle").

И это работает с.JPG файлы изображений (не только с.BMP-файлы), что довольно удобно ...

Исходный код сценария VB описан по адресу http://sites.google.com/site/sharerandomwallpapers/. Спасибо.

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