壁紙の設定

NT3.5の日本語ヘルプ(api32wh.hlp)には、以下の記述がある。

SetDeskWallpaper関数を使って別のビットマップ ファイル名を指定することにより、壁紙を変更できます。SetDeskWallpaperは、 指定されたファイルからビットマップを ロードし、 そのビットマップを使って画面の背景を描画します。そして、 新しいファイル名をレジストリのWallpaperキーに設定します。

ところが、このヘルプのどこを見ても、SetDeskWallpaperなる関数の詳細は記載されていない。どういうことなのだろうか。

この記述を読んだのは、まだWindowsについて右も左も分からなかった数年前のことである。そのころは、「マニュアルに嘘が書かれているはずが無い」と信じていたので、くまなく調べてみたのだが、結局「英語のSDKのドキュメントの誤訳である」と結論づけてあきらめた。

しかし、先日ふと(NT4.0で)user32.dllをクイックビューアで見てみると...なんと、その“SetDeskWallpaper”があるではないか!

半信半疑で以下のように呼び出したところ、SystemParametersInfo(SPI_SETDESKWALLPAPER, ...)と同様な動作をすることが確認できた。

	BOOL WINAPI SetDeskWallpaper(LPSTR BitmapFileName);
	SetDeskWallpaper("c:\\winnt40\\winnt256.bmp");

SetDeskWallpaperについて再度調べてみたが、実は結構有名らしい。また、Win3.0ではちゃんとSetDeskWallpaperという関数は存在したが、Win3.1になってSystemParametersInfoに置き換えられ、廃止ということになった、ただし、Win3.1でも、“BEAR285”という名前で、隠れて残ってはいたとのこと。

もっとも、SystemParametersInfoで簡易に壁紙を設定することが可能なので、今後わざわざ非公開関数のSetDeskWallpaperを使用する機会はないだろうが。

参考:

<3p8hos$gku@news-s01.ny.us.ibm.net>
(99/03/16 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。