Windowsの壁紙キャッシュ

   2012/02/23

こんにちは、管理人イガジーです。
今日は、Microsoft Windowsの話です。

Windowsの場合、壁紙ファイルを更新しても反映されません。
手作業でデスクトップの背景画像をセットしなおす必要があるのです。

例えば、A.jpg という画像ファイルをデスクトップの背景画像にセット
しておき、A.jpg に「壁紙にカレンダーを埋め込もう」でカレンダーを
埋め込んで、A.jpg に書きこんでも、何も変化が起きないのです。

これは、2つの関門があるためです(Windowsの仕様なのでしょう)。
(1)指定した壁紙ファイルはコピーされて別の名前で保存されている
 コピー(キャッシュ)の保存先は、Windowsの種類によって異なる
(2)Windowsに読み直しを指示しないと反映されない

まず、(1)ですが、壁紙のコピー(キャッシュ)は、以下の場所です。
(※ 管理人調べなので、バージョンや条件によって異なる可能性があります)

(a)Windows XP の場合
C:\Documents and Settings\(user name)\Local Settings\Application Data\Microsoft\Wallpaper1.bmp

(b)Windows Vista の場合
C:\Users\(user name)\AppData\Roaming\Microsoft\Windows Photo Gallery\Windows フォト ギャラリー壁紙.jpg

(c)Windows 7 の場合
C:\Users\(user name)\AppData\Roaming\Microsoft\Windows\themes\TranscodedWallpaper.jpg

(2)は、Win32apiを使い、例えば次のようなプログラムでOSに通知します。
#include <stdio.h>
#include <windows.h>
//
int main(int ac, char *av[])
{
char *fname;
//
fname=NULL;
if (ac>1) fname=av[1];
//
SystemParametersInfo (
SPI_SETDESKWALLPAPER,
0,
fname, // 壁紙の絶対パス
0 //SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE
);
return 0;
}
Windows XP,Vista,7 共通ですが、
Windows XP の場合は、bmp ファイルのみが有効になります。

引数無し(fname=NULL; )で、(1)の壁紙コピー(キャッシュ)が反映されます。

プログラムを動かすのも、背景画像指定するのも同じ手間、とも
いえますが、「壁紙にカレンダーを埋め込もう」に自動更新処理を
組み込む時などは、プログラム化が必要になります。

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)