How do I: Rotate Wallpapers?

Get help with using AutoHotkey (v1.1 and older) and its commands and hotkeys
tecdragon
Posts: 14
Joined: 31 Aug 2020, 10:22

How do I: Rotate Wallpapers?

Post by tecdragon » 15 Sep 2021, 10:10

I have been searching through the forum to find some code that I can manipulate into what I am looking for but having some trouble. Most of what I am finding has a ton of features. All I need is a simple script to change a wallpaper every 'x' minutes from a local folder.

For instance
Windows 10 operating system
C:\Pictures - has a batch of PNG wallpapers in it
Need AHK to cycle through the images at a specific intervals
5 minutes
Loop forever

Help please?

User avatar
mikeyww
Posts: 26874
Joined: 09 Sep 2014, 18:38

Re: How do I: Rotate Wallpapers?

Post by mikeyww » 15 Sep 2021, 10:44

Code: Select all

#Persistent
minutes := 1, dir := "D:\images", image := [], regKey := "HKEY_CURRENT_USER\Control Panel\Desktop"
RegWrite, REG_SZ, %regKey%, WallpaperStyle, 1
Loop, Files, %dir%\*.bmp
 image.Push(A_LoopFilePath)
SetTimer, Change, % 1000* 60 * minutes
Change:
image.Push(thisImage := image.RemoveAt(1))
RegWrite, REG_SZ, %regKey%, Wallpaper, %thisImage%
RunWait, RUNDLL32.EXE user32.dll`,UpdatePerUserSystemParameters
SoundBeep, 1500
Return
Sometimes works; needs a tweak somewhere....

tecdragon
Posts: 14
Joined: 31 Aug 2020, 10:22

Re: How do I: Rotate Wallpapers?

Post by tecdragon » 15 Sep 2021, 11:57

that is awesome, I didn't see the sound beep at first and was like why is it beeping? Appreciate the help.

One more question - anyway to make it only change the wallpaper on screen number 2?

tecdragon
Posts: 14
Joined: 31 Aug 2020, 10:22

Re: How do I: Rotate Wallpapers?

Post by tecdragon » 15 Sep 2021, 11:58

That is awesome!

One more question any way to make it only change the wallpaper on screen 2?

User avatar
mikeyww
Posts: 26874
Joined: 09 Sep 2014, 18:38

Re: How do I: Rotate Wallpapers?

Post by mikeyww » 15 Sep 2021, 12:07

Very good. I am not sure about the monitor-specific changes. A general Internet search or forum search might reveal the answer.

RussF
Posts: 1264
Joined: 05 Aug 2021, 06:36

Re: How do I: Rotate Wallpapers?

Post by RussF » 15 Sep 2021, 12:24

Check out Display Fusion. I use it & love it. Free version will do exactly that and a lot more. (I am not affiliated with the company, just like their products.)

[Edit] - Oops, my bad. I misread their web site on free vs. paid features. That capability is not available in the free version - sorry - only in the paid one.
Last edited by RussF on 15 Sep 2021, 13:31, edited 1 time in total.

User avatar
flyingDman
Posts: 2817
Joined: 29 Sep 2013, 19:01

Re: How do I: Rotate Wallpapers?

Post by flyingDman » 15 Sep 2021, 12:53

Re: Q1: Without using RegWrite:

Code: Select all

#persistent

arr := [], cnt := 1, mnts := 10
loop, files, C:\Users\xxx\Pictures\Wallpaper\*.png
	arr.push(A_LoopFileFullPath)
SetTimer, Change, % 1000*60*mnts

change:
DllCall("SystemParametersInfo",UInt,0x0014,UInt,0,Str,arr[cnt],UInt,2)
cnt := cnt = arr.count() ? 1 : ++cnt
return
14.3 & 1.3.7

tecdragon
Posts: 14
Joined: 31 Aug 2020, 10:22

Re: How do I: Rotate Wallpapers?

Post by tecdragon » 16 Sep 2021, 08:58

Anyway to make this only operate on Monitor number 2? I found a autobackground AHK but it is from 2006 it uses WM_DISPLAYCHANGE(0,0) and has the following code. But these monitors wont be changing this is a static secondary monitor that I want the wallpaper to change on at intervals.

Code: Select all

;AutoBackground
;tom at 3shizzletones.com (take out the shizzle)
;   http://www.3tones.com
;


;Built with AutoHotKey v1.0.44.10 and tested on Windows XP
;   http://www.autohotkey.com
;
;9/21/06
;added style function
;change method of changing background to using a dllcall

;check background on login
WM_DISPLAYCHANGE(0,0)

OnMessage(0x7E, "WM_DISPLAYCHANGE")
  return
  
WM_DISPLAYCHANGE(wParam, lParam)
  {
  ;WM_DISPLAYCHANGE is triggered any time a change is made to the display settings
  ;get the monitor count
  SysGet, mc, MonitorCount

  if mc = 1
    {
    ;if 1 monitor, use this background
    background_file = C:\Documents and Settings\user\My Documents\My Pictures\serenade.bmp
    ;set tile and style accordingly
    SetWallpaperStyle("Tiled")
    ;set background file
    DllCall("SystemParametersInfo", UInt, 0x14, UInt, 0, Str, background_file, UInt, 2) 
    }
  else if mc = 2
    {
    ;if 2 monitors, use this background
    background_file = C:\Documents and Settings\user\My Documents\My Pictures\reverie2x.bmp
    ;set tile and style accordingly
    SetWallpaperStyle("Tiled")
    ;set background file
    DllCall("SystemParametersInfo", UInt, 0x14, UInt, 0, Str, background_file, UInt, 2) 
    } 
  }
  
  SetWallpaperStyle(style)
  {
    ;for tiled,    use TileWallpaper=1 WallpaperStyle=0
    ;for centered, use TileWallpaper=0 WallpaperStyle=0
    ;for strech,   use TileWallpaper=0 WallpaperStyle=2
    if style=Tiled
      {
      RegWrite, REG_SZ, HKEY_CURRENT_USER, Control Panel\Desktop, TileWallpaper, 1
      RegWrite, REG_SZ, HKEY_CURRENT_USER, Control Panel\Desktop, WallpaperStyle, 0
      }
  else if style=Centered
      {
      RegWrite, REG_SZ, HKEY_CURRENT_USER, Control Panel\Desktop, TileWallpaper, 0
      RegWrite, REG_SZ, HKEY_CURRENT_USER, Control Panel\Desktop, WallpaperStyle, 0
      }
  else if style=Streched
      {
      RegWrite, REG_SZ, HKEY_CURRENT_USER, Control Panel\Desktop, TileWallpaper, 0
      RegWrite, REG_SZ, HKEY_CURRENT_USER, Control Panel\Desktop, WallpaperStyle, 2
      }
  }
  

Post Reply

Return to “Ask for Help (v1)”