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を使用する機会はないだろうが。