Windowsの壁紙キャッシュ
こんにちは、管理人イガジーです。
今日は、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>
Windows XP,Vista,7 共通ですが、
#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 の場合は、bmp ファイルのみが有効になります。
引数無し(fname=NULL; )で、(1)の壁紙コピー(キャッシュ)が反映されます。
プログラムを動かすのも、背景画像指定するのも同じ手間、とも
いえますが、「壁紙にカレンダーを埋め込もう」に自動更新処理を
組み込む時などは、プログラム化が必要になります。
この記事へのコメントはこちら