豊田 孝

 本日は,私たちのデスクトップ上に置かれているオブジェクトが持つメソッド情報を調べてみましょう。メソッドは,格闘技などに例えれば,個々の選手が持つ得意技といえます。得意技が増えれば,その選手はこれまで以上に成長したといえます。Windows 2000に比べて,Windows XPの得意技の数,つまり,メソッドの数は増えているのでしょうか? 実際に確かめてみましょう。

図1●Windows XPデスクトップ上に作成したメモ帳のアイコンを右クリックする
 今回も2種類のプログラムを用意しています。1つは任意のメソッドを実行する10行サンプル・プログラムです。もう1つは,10行サンプル・プログラムを有効活用するためのデータを表示する補助プログラムです。基本的にはOKボタンをクリックするだけで必要情報が表示されます。補助プログラムの高度な使用法については,この記事の最後で紹介していますから,必要に応じて試してみてください。それでは,さっそく本論に入りましょう。

 インストールしたばかりのWindows XP(β2)デスクトップ上にメモ帳へのショートカット・オブジェクトを作成し,対応するアイコンを右クリックすると,図1[拡大表示]のような情報が表示されます。

 この画面の上から2番目の項目「スタートメニューにアイコンを追加」は,Windows 2000には存在しません。皆さんが今使用しているWindows 2000の画面と比較してみてください。この「スタートメニューにアイコンを追加」という名称を持つメニュー・コマンドを実行すると,メモ帳へのショートカット・アイコンがスタート・メニューに追加されます(図2[拡大表示])。

図2●メモ帳へのショートカット・アイコンがスタート・メニューに追加される
 いかがでしょう。確かに便利です。ところで皆さん,このようなWindows 2000からWindows XPへの変化を,マウスでいちいち右クリックしながら確認するのはちょっと面倒だとは思いませんか? また,私たちの目に直接見えないところで,この種の変更が加えられているとしたらどうでしょう? やはり,必要な情報は効率的に収集したいものですね。このような場合,目的のデスクトップ・オブジェクトのメソッド情報を一覧表示してくれるプログラムがあれば,Windows 2000からWindows XPへのメソッド・レベルでの変化が一瞬にして把握できます。

 前回,デスクトップ上にある「Internet Explorer」オブジェクトの実体が,私たちの目に見えないところで,“フォルダからファイル”に変更されていることを確認しました。このため一部の人は,その変化に伴い,メソッド数も変更されているのでは? と疑問を持ったことでしょう。それでは,さっそく,「Internet Explorer」オブジェクトが持つ各種メソッドを自動実行する10行サンプル・プログラムを紹介しましょう。

 VBScriptコードで記述したサンプル・プログラムは次のようになります。


'*********************************************************
'プログラム行数 = 9
'機能:Internet Explorerを自動起動する
'カットアンドペースト後,
'No7IEVerb.vbsとして保存する
'*********************************************************

Dim myHelper,myDTHelper1,myDTHelper2,myDTHelper3,myDTHelper4,myDTHelper5
  Set myHelper = CreateObject("Shell.Application.1") '相談相手呼び出し
  Set myDTHelper1 = myHelper.NameSpace(0) 'デスクトップ選択
  Set myDTHelper2 = myDTHelper1.Items '第6回記事参照
  Set myDTHelper3 = myDTHelper2.Item(2) 'IE選択
  Set myDTHelper4 = myDTHelper3.Verbs '本文参照
  Set myDTHelper5 = myDTHelper4.Item(2) 'メソッド選択。本文参照
  myDTHelper5.DoIt '選択したメソッド実行。本文参照
  Set myHelper = Nothing
対応するJScriptコードは次の通りです。

/*
'*********************************************************
'プログラム行数 = 8
'機能:Internet Explorerを自動起動する
'カットアンドペースト後,
'No7IEVerb.jsとして保存する
'注:機能概要はVBScriptコード参照
'*********************************************************
*/

  var myHelper = new ActiveXObject("Shell.Application.1");
  var myDTHelper1 = myHelper.NameSpace(0);
  var myDTHelper2 = myDTHelper1.Items();
  var myDTHelper3 = myDTHelper2.Item(2);
  var myDTHelper4 = myDTHelper3.Verbs();
  var myDTHelper5 = myDTHelper4.Item(2);
  myDTHelper5.DoIt();	
  myHelper = null;
図3●ListMethods.exeの実行結果(Windows 2000)
図4●ListMethods.exeの実行結果(Windows XP)
 前回のサンプル・プログラムと今回のプログラムの違いは,次の1行だけです。

前回;Set myDTHelper5 = myDTHelper4.Item(0)
今回:Set myDTHelper5 = myDTHelper4.Item(2)

 今回の行は,「Internet Explorer」オブジェクトのメソッドの中の,3番目のメソッドを選択しています。つまり,Item(2)の数値2は「3番目のメソッドを選択する」という意味を持っているのです。前回はItem(0)としていましたから,1番目のメソッドを選択していたことになります。ここで気になるのは,数値と実際のメソッドの対応関係ですね。そこで今回は,「ListMethods.exe」という名称を持つ補助プログラムを用意してみました(ダウンロードはこちら)。このプログラムは,オブジェクトが持つ数値とメソッドの対応関係を一覧表示します。このプログラムを私のWindows 2000とWindows XP(β2)環境で実行すると,図3[拡大表示],図4[拡大表示]のような情報を返します。

 いかがでしょう。Iten(2)の数値2に対応するメソッドは,Windows 2000とWindows XPのいずれの環境でも「削除」となっています。また,Windows XPでは「名前の変更」というメソッドが1つ増えていますね。詳しくは後ほど説明するとして,まずはこのサンプル・プログラムをWindows 2000とWindows XPそれぞれの環境で実行してみましょう。「削除」メソッドを実行するわけですから,少々緊張します。結果は図5[拡大表示],図6[拡大表示]の通りです。

 さて皆さんはこれら2つの画面情報を比較し,どのような感想を持ったでしょう? 実は,私はWindows 2000が返す情報をよく理解できません。「削除」メソッドはデスクトップ上の多数のオブジェクトが持っています。皆さんは「削除」という処理をどのようにお考えでしょうか?

図5●「削除」メソッドの実行結果(Windows 2000)
図6●「削除」メソッドの実行結果(Windows XP)
 例えば,「あるファイルを削除する」という場合,常識的には「そのファイルをごみ箱へ移動する」と解釈することができます。しかし,上のWindows 2000からのメッセージは,“「ごみ箱」には移動できないが,「削除しますか?」”と,逆に私たちに聞き返しています。「はい」を選択した場合,どのようなことになるのか一切教えてくれていません。この説明は不親切といってよいでしょう。ところが,Windows XPからのメッセージは,「ごみ箱」との関係は依然不明ながら,“「Internet Explorer」オブジェクトはデスクトップから削除できるし,後で修復もできます”と,簡潔に述べています。これはよくよく注意していないと見落としてしまいそうな変更ですが,改善の後が見られるといってよいと思います。

 すでに触れたように,Windows XPでは「名前の変更」というメソッドが1つ増えています。実は,Windows 2000のデスクトップ上にある「Internet Explorer」オブジェクトを右クリックすると,「名前の変更」を含むポップアップ・メニューが現在でも表示されます。後でご自分で確認してください。ところが,先に紹介した「ListMethods.exe」をWindows XP環境で実行した結果には「名前の変更」がきちんと含まれていましたが,Windows 2000環境で実行した結果には「名前の変更」が含まれていませんでしたね。これはいったいどういうことでしょう? さらに「プロパティ」メソッドを実行しようとして,次のようなコードを用意しても,実行されることはありません。

・Set myDTHelper5 = myDTHelper4.Item(3) 'Windows 2000
・Set myDTHelper5 = myDTHelper4.Item(4) 'Windows XP

 これは私の推測も入っていますが,Windows XPで「名前の変更」メソッドを追加したことから判断する限り,Microsoftは将来的には,右クリックで表示されるメニュー・コマンドのすべてのメソッドをオブジェクトに実装してくるのではないかと予想されます。現状では,右クリック操作で表示される情報と本日の「ListMethods.exe」補助プログラムの表示結果がどう考えても論理的に矛盾しており,“分かりにくい”といえるでしょう。製品版Windows XPがこのあたりの“分かりにくさ”をどのように解決してくるのか楽しみです。

補助プログラムの使い方

図7●補助プログラム「ListMethods.exe」を起動したところ
 ここでは,補助プログラム「ListMethods.exe」の使い方を簡単に説明します。プログラムをダブルクリックなどで起動すると,図7[拡大表示]のような初期画面が表示されます。

 ご覧のように,デフォルトでは「Internet Explorer」オブジェクトが選択され,メソッド一覧情報が返されます。他のデスクトップ・オブジェクトのメソッド一覧情報を表示させたい場合には,第6回で紹介した「listdesktopitems.exe」補助プログラムを実行し,画面に表示される情報を参考にしながら,任意のデスクトップ・オブジェクトを選択してください。例えば,「マイ ネットワーク]を選択して,Windows 2000とWindows XP環境で実行すると,図8[拡大表示],図9[拡大表示]のような情報がそれぞれ返されます。

図8●「マイ ネットワーク]を選択して実行した結果(Windows 2000)
図9●「マイ ネットワーク]を選択して実行した結果(Windows XP)
 いかがでしょう? Windows XPの方は,Windows 2000よりメソッド数が2つ増えていますね。メソッド数が増えるということは,Windows XPはより強力になることを意味します。この補助プログラムを使用すれば,任意のデスクトップ・オブジェクトの変化を効率的に把握できます。また,現在一部メソッドは名称が公開されているだけで,実際には実装されていません。このプログラムと本日の10行サンプル・プログラムを併用すれば,どの時点で機能が実装されるのか即座に分かるはずです。いったん公開されたメソッド名がこっそり削除されることもありえないことではないでしょう。後日ご自分の目で直接確認してください。

 今回は,デスクトップオブジェクトの1つである「Internet Explorer」オブジェクトのメソッド情報を取り出し,Windows 2000からWindows XPへの変化をメソッド・レベルで調べる方法を紹介いたしました。いかがでしたでしょうか? 私たちの目に見えなところでいろいろな変更が加えられていることを具体的に確認できました。

 次回は,コントロールパネル内にある,各種コントロール機能が持つメソッド情報を取得する方法を紹介します。なお,次回記事は,まもなく取り上げる予定のNameSpace(名前空間)への入門という意味合いもあります。実は,コントロールパネルやデスクトップも名前空間の一部なのです。名前空間はたいへん魅力に満ちた空間です。このため,基礎からじっくり説明していく予定です。それでは次回またお会いいたしましょう。ごきげんよう!