"壁紙チェンジャーを作る"
はじめに
ここでは簡単な壁紙チェンジャーを作っていこうと思います。 |
最終更新日 1998 12/23
第一回 壁紙の獲得 その1
まず現在の壁紙がどこで保存されているのでしょうか。 それを調べるにはレジストリを利用します。レジストリはウインドウズのあらゆる設定を 保存しています。ここを書き換えてやればウインドウズを自由にカタマイズできます。 さて、壁紙の設定が書かれている場所はHKEY_CURRENT_USER\control panel\desktop のWallpaperキーです。レジストリエディタで探せばすぐに見つかります。 つまり、ここの値を書き換えてやれば壁紙が変更できるのです。 では、VBからこれを行なうにはどうすればいいでしょうか。VBの標準の機能だけでは 不可能です。そこでWin32API関数を使います。 使用する関数はRegOpenKeyとRegQueryValueExです。それぞれの関数の定義は
となっています。 では、プログラムをかいてみましょう。標準モジュールにでも
これで簡単に壁紙の値を獲得できます。 例えば、フォームモジュールにラベルをはりつけて、
とすると、現在の壁紙のファイル名がラベルに表示されます。 とりあえず今回はここまで。では・・・・。 |
第二回 壁紙の獲得 その2
今回は前回作ったGetWallPaper関数を元にして、レジストリの値を獲得する関数を作ろうと思います。 GetWallPaper関数では RootKey = HKEY_CURRENT_USER '
ルートキーの設定 と、各変数の値を設定しています。つまり、この変数を適切な値に書き換えれば任意の値を得ることがで きるわけです。そこでGetWallPaper関数を元にしてGetReg関数を作ります。
またGetWallPaper関数も次のように書き直せます。
|
第三回 壁紙の設定
前回までで壁紙がレジストリのどこに保存されているか分かったと思います。そこで今回から壁紙を 変更する方法をやっていこうと思います。 壁紙を変更するにはレジストリを変更してやればいいので、まずレジストリを書き換える関数をつくり ます。まずWin32API関数の宣言部分ですが
指定レジストリの値(文字列のみ)を獲得する関数は以下のようになります。
使用する時は SetReg RootKey,SubKey,ValuName,Value とします。 RootKeyはルートキーの定数が、SubKeyにはサブキー名が、ValueNameには値の名前が、Value には設定したい値(文字列)を指定します。成功すればTrueが失敗すればFalseが返ります。 さて、次に壁紙を設定するSetWallPaper関数をつくります。
FileNameに壁紙ファイルをフルパスで指定してこの関数を呼び出すとレジストリの壁紙の値を変更し ます。もし、ファイルが存在しないなどのエラーがあればこの関数は戻り値としてFalseをかえします。 さて、これで壁紙が変更できるようになりました。しかし、この関数を使ってみるとわかりますが、 画面上の壁紙はまったく変更されません。これはレジストリの値が反映されないためです。ためしに 再起動すると壁紙が変更されています。では、どうすればレジストリの値を再起動せずに反映させる のでしょうか。このことについては次回やろうと思います。 |
第四回 壁紙の変更
さて、いよいよ壁紙の変更方法ですが、これを行なうには前回話した通り、レジストリの値を反映させな ければなりません。そのためにはWindowsにレジストリが更新されたことを通知し、再度読み込ませなけ ればなりません。それを行なうためには以下の関数をつかいます。まずはWin32APIの宣言部分から書 きます。
次に壁紙を更新するRenewWallPaper関数を作ります。
さて、それでは壁紙を変更する手順を簡単にかくと、
となる。 |
・第一回〜第四回までのまとめ
それでは今までのまとめとして簡単な壁紙チェンジャーを作ってみましょう。 第一回〜第四回までで作った関数をあらかじめ読み込んでおいてください。そして、標準モジュールに以下 のようにかきます。
これをコンパイルしたらビットマップファイルをこのアイコンにドラッグ&ドロップしてください。壁紙が変更 されたはずです。デスクトップにショートカットを作ったり、ビットマップファイルに関連づけをしたりSend to フォルダにいれたりすれば便利かもしれません。 ところで上のソースのうち壁紙の更新にSetWallPaper関数を使っていません。実は何も直接レジストリ をいじらなくても可能だったのです。このプログラムをかいているときに気がつきました。 |