APOD to Desktop Wallpaper
Recently I had a meeting with one of our customers. I was setting up my laptop, plugging it into the beamer. Immediately the customer raised a brow. The beamer was showing a gorgeous HD image of the deepwater horizon oil rig blowing up. The following smalltalk was interesting.
I decided to show some nicer images the next time I'd meet them and this evening I got around to writing a little Perl snippet to download the Astronomy Picture of the Day from apod.nasa.gov <http://apod.nasa.gov>
_ and set it as the Windows wallpaper. It uses LWP::get
to fetch the main page. It fiddles with the text and downloads the linked image to $dlbase
, finally using Win32::API
to call SystemParametersInfo
to set the background.
Be warned: during testing not every valid .jpeg
actually would display as a desktop wallpaper. Another thing is that you really want to specify an absolute path, when calling SystemParametersInfo
, or it wont display correctly after logging out and back in again, hence the $dlbasew
variable.
#!/usr/bin/perl use strict; use warnings; use Win32; use Win32::API; use LWP::Simple; require Carp; # for both constants see winuser.h use constant SPI_SETDESKWALLPAPER => 20; use constant SPIF_UPDATEANDSENDINI => 3; # SPIF_UPDATEINIFILE || SPIF_SENDWININICHANGE my $apodbase = 'http://apod.nasa.gov/'; my $dlbase = 'c:/Users/mmeyer/Downloads'; my $dlbasew = 'c:\\Users\\mmeyer\\Downloads\\'; chdir $dlbase or die "Couldnt chdir to $dlbase: $!"; my $content = get($apodbase) or die "Couldn't download image: $!"; Carp::croak 'Content doesn\'t match' unless $content =~ m/<IMG SRC="(.*)"/g; my $urlend = $1; Carp::croak 'No url found' unless $urlend =~ m|([^/]+)$|; my $targ = $1; my $status = getstore($apodbase . $urlend, $targ); Carp::croak "Couldn't store image: $status" unless is_success($status); my $spf = Win32::API->new('user32','SystemParametersInfo', 'IIPI', 'I') or Carp::croak "Could not import function.\n"; $spf->Call(SPI_SETDESKWALLPAPER, 0, $dlbasew . $targ, SPIF_UPDATEANDSENDINI) or Carp::croak "Could not set wallpaper:\n" . Win32::GetLastError(); exit;
See my github scratch repo.