Win32::APIを使ってデスクトップの背景を変える

Vistaで動作確認。

#!/usr/bin/perl
use strict;
use warnings;
use Win32::API;
my $SPI = Win32::API->new("user32", "SystemParametersInfo", "NNPN", "N");
my $SPI_SETDESKWALLPAPER = 20;
my $IMG_PATH = "c:\\ashibe.bmp";
my $fWinIni = 0; #一時的な変更なら0。1にするとレジストリを書き換える。
   $SPI->Call($SPI_SETDESKWALLPAPER, 0, $IMG_PATH, $fWinIni);
  • このサンプルのままだとcドライブ直下にあるashibe.bmpを壁紙にします。bmpかjpgファイルを壁紙にできます。
  • 画像の表示方法(拡大、中央など)は現在の設定を引き継いで画像だけ変わります。
  • レジストリを書き換えるというのは通常の壁紙を変える動作です。一時的というのは画面のプロパティで壁紙を変える画面にいくと前の壁紙に戻るということです。(ちなみにHKEY_CURRENT_USER\Control Panel\DesktopにあるWallPaper)