豊田 孝

図1●Windows 2000のコントロールパネル
 今回は,前回紹介したサンプル・プログラムの活用方法を説明します。今回の記事を一読すると,Windows 2000 Professionalのコントロールパネルに登録されている機能を,プログラムの数値を変えるだけで自由に呼び出せるようになります。また,2001年10月に出荷予定のWindows XPのコントロールパネルの仕組みを理解する上でも役立ちます。では,さっそく始めましょう。

コントロールパネル機能の自動化

 ご承知のように,コントロールパネルは,現在私たちが使用しているコンピュータ環境を柔軟にカスタマイズするための,グラフィカル・ユーザー・インタフェース(GUI)を提供しています。Windows XPは,Windows 2000以前と比べてユーザー・インタフェースが大幅に変わるといわれてます。まずは,Windows 2000のコントロールパネル画面(図1[拡大表示])とWindows XP(β2)のコントロールパネル画面(図2[拡大表示])を見比べてみましょう。

図2●Windows XPのコントロールパネル
 ご覧のように,大幅に変更されていることが分かります。皆さんはWindows XPをはじめてインストールしたとき,どのような方法でWindows 2000からの変更内容を把握し,使いたい機能を選択するでしょう? Windows 2000とWindows XPのユーザー・インタフェースをそれぞれ画面に表示させ,2つを相互に見比べますか? もちろん,この方法でもWindows 2000とWindows XPの相違を把握することはできますが,面倒です。このような場合,これから紹介するような,コントロールパネルに登録された機能を一覧表示するプログラムと,コントロールパネル機能を一発で呼び出す機能を持つプログラムを使うと便利です。

 それではまず,コントロールパネル機能を呼び出すサンプル・プログラムのソースコードを説明します。ソース・コードの基本的な考え方は第1回~第4回で説明してありますから,今回からは,どちらかといえば,サンプル・プログラムの活用方法に説明の重心を移していきたいと思います。


'**************************************************
'プログラム行数 = 9
'機能:コントロールパネル機能を呼び出す。

'カットアンドペーストでテキストエディタにコピー後, 'CPAuto.vbsとして保存してください。

'************************************************** Dim myHelper,myCPHelper_1,myCPHelper_2,myCPHelper_3,myCPHelper_4,myCPHelper_5 Set myHelper = CreateObject("Shell.Application.1") Set myCPHelper_1 = myHelper.NameSpace(3) ' NameSpaceについては次回詳述 'myCPHelper_1.Items.Item(18).Verbs.Item(0).DoIt 'このコードは次のような意味を持つ。基本となる考え方については前回記事参照 'myCPHelper_1.Items."「日付と時刻」画面の".Verbs."表示を"."開始せよ!" '相談相手を呼び出し,相談する Set myCPHelper_2 = myCPHelper_1.Items' 詳細は本文参照 Set myCPHelper_3 = myCPHelper_2.Item(18)' 目的の機能選択 Set myCPHelper_4 = myCPHelper_3.Verbs' 詳細は本文参照 Set myCPHelper_5 = myCPHelper_4.Item(0)' 目的のメソッド選択 myCPHelper_5.DoIt '選択したメソッドの実行 Set myHelper = Nothing

図3●「日付と時刻」のアイコンを右クリックする
 このソース・コードは,今までの連載で何度も説明した「相談相手を呼び出し,相談する」という考え方に支えられています。ソース・コード自体は一見するととても難しそうな印象を与えてしまいますが,実は考え方自体はきわめて自然なのです。図3[拡大表示]を見ていただきましょう。

 これはコントロールパネル内に表示されている「日付と時刻」のアイコンを右クリックした画面です。Windowsにおいて“アイコンを右クリックする”という行為を我々の日常生活に当てはめると,“あなたはどのようなことができますか”と,直接本人に尋ねているようなものです。図3の場合,「日付と時刻」機能本人から返ってきた答えは,“「開く」と「ショートカットの作成」という2つの動作ができる”というものです。

 これは,「日付と時刻」機能自身が自分のできることを知っている,ということを意味します。私たちの日常生活に例えれば,相談相手自身が“自分が相談に乗れるのはこの範囲だよ”と教えてくれているようなものです。このわかりやすい論理がプログラム設計にも活かされているわけです。

 ちなみに,「日付と時刻」機能の「開く」をマウスでクリックすると,実際には私たちの目に見えないところで「rundll32.exe」というプログラムが起動され,rundll32.exeがtimedate.cplファイルを開いているのです。しかし私たちは,このような複雑な事情を一切意識する必要がありません。私たちがすべきことは,「開く」をクリックすることだけです。このようなことが可能なのは,「日付と時刻」機能自身が自分のできることを知っているからなのです。

図4●Windows 2000のコントロールパネル機能の一覧
 実は,私たちの多くが日常的に利用している右クリック操作は,「相談相手を呼び出し,相談する」機能を持っているのです。このため,「日付と時刻」コントロール機能上でマウスを右クリックすることは,次のソース・コードを実行することと同じなのです。

Set myCPHelper_4 = myCPHelper_3.Verbs '相談相手を呼び出す
Set myCPHelper_5 = myCPHelper_4.Item(0) '「開く」機能選択相談
myCPHelper_5.DoIt '「開く」機能実行依頼

サンプル・プログラムの活用方法

 ここでは,サンプル・プログラムの活用方法を説明します。プログラム中の数値を変更するだけで,Windows 2000とWindows XPのコントロールパネルの機能を呼び出すことができます。

 コントロールパネルの機能の呼び出しを実現するのが次のコードです。

Set myCPHelper_3 = myCPHelper_2.Item(18) 'コントロール機能の選択

図5●Windows XPのコントロールパネル一覧
 実は,このコードには一つの限界があります。このコードは18という数値を使って希望するコントロール機能を選択しようとしているのですが,この18に対応するコントロール機能がOSのバージョンやユーザー環境ごとに異なっているのです。私のWindows 2000 Professional環境では,数値18に対応するコントロール機能は「日付と時刻」設定機能ですが,Windows XP(β2)環境では「ユーザアカウント」設定機能です。ほかのユーザー環境ではまた違う機能になっているかもしれません。そこで今回は,「ListCPItems.exe」というプログラムを用意しました(ダウンロードはこちら)。このプログラムは,コントロールパネルに搭載されている機能と,各機能に割り振られた番号を一覧表示するプログラムです。Windows 2000とWindows XP環境で実行すると,図4[拡大表示],図5[拡大表示]のような画面が表示されます。

図6●myCPHelper_2.Item( )の値を「26」にする(Windows 2000)
 この2つの画面情報を見比べれば,Windows 2000からWindows XPへの変化は一目瞭然ですね。Windows XPでは「音声認識」という機能が新たに追加されています。Windows XP(β2)をお持ちの方は起動してテストしてみるとよいでしょう。

 図4,図5の画面情報は,ファイル数とフォルダ数という2つの欄に分けて表示していますが,Windows XPはWindows 2000と比べてフォルダ数が増えていることに気が付いたでしょうか。詳しい説明は後日行う予定ですが,フォルダ内の項目を右クリックしてみてください。メソッド数が大幅に増えていることが確認できるはずです。また,「c:\winnt\system32\timedate.cpl」ファイルなどを右クリックしてみると面白い情報が表示されます。

 それでは,画面情報を参照しながら,目的のコントロール機能に対応する数値を決め,myCPHelper_2.Item(18)の「18」の部分をその数値で置き換えてみましょう。例えば,「26」と入力すれば,私のWindows 2000とWindows XP環境ではそれぞれ図6[拡大表示],図7[拡大表示]のよう画面が表示されます。

図7●myCPHelper_2.Item( )の値を「26」にする(Windows XP)
 ご覧のように,Windows 2000環境では「電源オプション」画面が表示されますが,Windows XP環境ではエラーが出てしまいます。理由はお分かりですね。Windows XP(β2)のコントロールパネルには「26」という数値が定義されていないからです。Windows 2000環境と同じように,Windows XP環境でも「電源オプション」画面を表示したいのであれば,「26」ではなく,「23」を指定します。みなさんも,自分の環境で目的のコントロールパネル機能をいろいろ試してください。

 今回は,コントロールパネルの機能を簡単に呼び出す方法を紹介しました。ListCPItems.exeプログラムと併用すれば,今回の10行サンプルコードは便利な学習教材になると思います。自由に改善して試してみてください。ただし,実行は自己責任でお願いいたします。次回は,デスクトップの世界を見てみることにします。それではまたお会いいたしましょう。ごきげんよう。