Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Programmatically change the desktop wallpaper periodically

Tags:

java

c++

windows

What is the best way to go about creating a program that would change the desktop wallpaper periodically? I would also like to create a GUI around the program. I am a Computer Science student, and as such I know basic programming in Java, and C++ among others. This will be done on Windows 7 OS.

What would be the best language to use for a project like this?

Ideally I would like to use the system clock to trigger the change. Is this possible?

Am I in over my head?

Any answers will be very much appreciated. Thank you.

like image 681
Shane Quiroz Avatar asked Aug 31 '12 00:08

Shane Quiroz


People also ask

How do I change my desktop background periodically?

In the Desktop Background window, click the “Browse” button to the right of Picture location, and then choose the folder containing your wallpaper images. Select the background images you want to use, and then enable the timed slideshow feature on the “Change Picture Every” dropdown menu.

Can desktop wallpaper change automatically?

Windows has a built-in slideshow feature that can automatically change your wallpaper after a set interval. This feature only works with your own collection of wallpapers so the wallpapers must be downloaded first.

How do I change my desktop background in Python?

Using the SystemParametersInfoW(SPI_SETDESKWALLPAPER, _ , _ , _ ) parameter, we can change the desktop wallpaper programmatically using following python script: import ctypes. path = "your_wallpaper_path" SPI_SETDESKWALLPAPER = 20.


1 Answers

In Java :

import java.util.*;

public class changer
{
    public static native int SystemParametersInfo(int uiAction,int uiParam,String pvParam,int fWinIni);

    static
    {
        System.loadLibrary("user32");
    }

    public int Change(String path)
    {
       return SystemParametersInfo(20, 0, path, 0);
    }

    public static void main(String args[])
    {
        String wallpaper_file = "c:\\wallpaper.jpg";
        changer mychanger = new changer();
        mychanger.Change(wallpaper_file);
    }

}

In Win32 C++, You can use SetTimer to trigger a change.

#define STRICT 1 
#include <windows.h>
#include <iostream.h>

VOID CALLBACK TimerProc(HWND hWnd, UINT nMsg, UINT nIDEvent, DWORD dwTime) 
{

  LPWSTR wallpaper_file = L"C:\\Wallpapers\\wallpaper.png";
  int return_value = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, wallpaper_file, SPIF_UPDATEINIFILE);


  cout << "Programmatically change the desktop wallpaper periodically: " << dwTime << '\n';
  cout.flush();
}

int main(int argc, char *argv[], char *envp[]) 
{
    int Counter=0;
    MSG Msg;

    UINT TimerId = SetTimer(NULL, 0, 2000, &TimerProc); //2000 milliseconds

    cout << "TimerId: " << TimerId << '\n';
   if (!TimerId)
    return 16;

   while (GetMessage(&Msg, NULL, 0, 0)) 
   {
        ++Counter;
        if (Msg.message == WM_TIMER)
        cout << "Counter: " << Counter << "; timer message\n";
        else
        cout << "Counter: " << Counter << "; message: " << Msg.message << '\n';
        DispatchMessage(&Msg);
    }

   KillTimer(NULL, TimerId);
return 0;
}
like image 122
Software_Designer Avatar answered Oct 13 '22 10:10

Software_Designer