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
#!/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.