豊田 孝

 前回は,シェル名前空間とショートカットの関係を手短に復習するとともに,ショートカットが自分専用のデータベースを持っていることを紹介しました。データベースの基本はあくまでもデータを格納することですから,格納されているデータを読み出す10行プログラムも紹介しました。本日は,データベースにデータを書き込む10行プログラムを紹介します。

 データベースへの読み書き操作ができるようになれば,データベースそのものを作ってみたいと思うのが人情というものですが,それは次回までお待ちいただきます。

Windows XPの最新機能とショートカット・オブジェクトの関係

 それでは本論に入る前に,Microsoftの開発者は,ショートカット・データベースをどのように活用しているのか見ておきましょう。

図1●「No15ShortCutRead.exe」プログラムで取り出した内容
 私たちが新しいファイルを作成し,それを保存すると,「最近使ったファイル」名前空間内に,自動的にそのファイルへのショートカットが作成されます。自動的に作成されるショートカット・オブジェクトが持つデータベースからデータを読み出してみると,図1[拡大表示]のような結果が返されます。この情報は前回紹介した補助プログラム「No15ShortCutRead.exe」で取り出しています。興味のある方はダウンロードし,実行してみてください。

 ご覧のように,自動作成されたデータベース内には,かなりの空白が目立ち,必要最低限のデータだけが書き込まれるようなメカニズムが用意されていることがわかります。それではここで,「管理ツール」名前空間内に作成されているショートカット・オブジェクトのデータベースから情報を読み出してみましょう。ご承知のように,これらのショートカット・オブジェクトはWindows 2000やWindows XPなどをインストールすると自動的に作成されます。表現を変えれば,これらのショートカットはMicrosoftの開発者が用意したものといってよいでしょう。

図2●イベント・ビューアへのショートカット・オブジェクトが持つデータベース内容
 図2[拡大表示]の画面情報は,イベント・ビューアへのショートカット・オブジェクトが持っているデータベース内容です。「説明」欄に注目してください。欄内の文字列を一読してみると分かるように,イベント・ビューアの簡単な機能説明文が格納されています。イベント・ビューアの機能概要が一目で理解できますから,大変便利です。「管理ツール」名前空間内のその他のショートカット・オブジェクト情報を読み出してみたい方は,本日の補助プログラム「No16ToolsDBRead.exe」をダウンロードし,お時間のあるときに試してみてください。

図3●「Windows Messenger」ショートカット・オブジェクトが持つデータベース情報
図4●「Windows Media Player」ショートカット・オブジェクトが持つデータベース情報
 それでは,Windows XPが搭載する最新機能へのショートカット・オブジェクトが持つデータベース情報も読み出してみましょう(図3[拡大表示],図4[拡大表示])。

 これらの情報は,Windows XP RC1環境の「プログラム」名前空間内のショートカット・オブジェクトのデータベースから読み出しています。「説明」欄に格納されている文字列から,最新機能である「Windows Messenger」と「Windows Media Player」の機能概要を一目で把握できると思います。例えば,Windows Messengerの「説明」欄を読むと,Windows Messengerは,インターネットへの(常時)接続を通して,ビジネス・パートナや友人たちとのコミュニケーションを支援する機能を提供していることが分かります。リモートヘルプやMSN Explorerなどの他の最新機能に関する説明文も読みたい方は,補助プログラム「No16Program2.exe」と「NO16Program23.exe」を実行してみてください。

データベースへの書き込み処理

 それでは本日の本題であるデータベースへの書き込み操作方法を説明することにします。まず,10行サンプル・プログラムを見ていただきましょう。VBScriptコードは次のようになります。


'*********************************************************
'プログラム行数 = 10
'機能:ショートカットデータベースへデータを書き込むコード
'コピー・アンド・ペースト後,
'No16ShortCutRW.vbsとして保存する
'*********************************************************
Dim myHelper, myShortCut,myDB
Set myHelper = CreateObject("Shell.Application.1")
Set myShortCut = myHelper.NameSpace(8).Items.Item(1)

If (True = myShortCut.IsLink) Then
Set myDB = myShortCut.GetLink
myDB.Description = "日経BP ITPro第16回連載サンプルコード:豊田孝作成"
myDB.Save
WScript.Echo myDB.Description
End If

Set myHelper = Nothing
対応するJScriptコードは次の通りです。


/*
'*********************************************************
'プログラム行数 = 7
'機能:ショートカット・データベースへデータを書き込むコード
'コピー・アンド・ペースト後,
'No16ShortCutRW.jsとして保存する
'*********************************************************
*/
var myHelper = new ActiveXObject("Shell.Application.1");
var myShortCut = myHelper.NameSpace(8).Items().Item(1);

if (true == myShortCut.IsLink)
var myDB = myShortCut.GetLink;
myDB.Description = "日経BP ITPro第16回連載サンプル・コード:豊田孝作成";
myDB.Save();
WScript.Echo (myDB.Description);

myHelper = null;

図5●サンプル・プログラムの実行結果
 これらの10行プログラムを実行すると,図5[拡大表示]のような結果が返されます。

 ここで,サンプル・プログラムの機能を簡単に説明しておきましょう。まず,数値「8」に対応する「最近使ったファイル」名前空間内の第2オブジェクト(Items.Item(1)) を呼び出しています。その後,IsLinkプロパティを使って,そのオブジェクトがショートカットであることを確認しています。ショートカット・オブジェクトであることが確認できた場合,そのオブジェクトの持つデータベースにアクセスするための情報をGetLinkプロパティから取り出しています。ここまでは前回と同じですが,次の2行は今回初めて使用されるコードです。

myDB.Description = "日経BP ITPro第16回連載サンプルコード:豊田孝作成"
myDB.Save

図6●「最近使ったファイル」内の第2オブジェクトのプロパティ
 最初のコードは,データベースのDescription項目に「日経BP ITPro第16回連載サンプルコード:豊田孝作成」という文字列を書き込んでいます。2番目のコードは,その書き込んだ文字列をデータベースに保存しています。これらのコードが実行されると,「最近使ったファイル」内の第2オブジェクトのプロパティは図6[拡大表示]のように変化します。

 この画面には「コメント」という欄がありますが,そこに「日経BP ITPro第16回連載サンプルコード:豊田孝作成」という文字列が書き込まれていると思います。すでに説明したように,「最近使ったファイル」名前空間内に自動作成されるショートカット・データベースの「コメント」欄は通常空白となっていますから,この画面は,データベースへの書き込み処理が正常に行われていることを示しています。サンプル・プログラム内の文字列を自分なりに変更し,ぜひ実行してみてください。本日はもう1つ補助プログラム「No16CheckProperty.exe」を用意しています。この補助プログラムを実行すると,2種類の入力画面が表示されます。最初の画面は「最近使ったファイル」名前空間内のオブジェクト・リストが表示されますから,任意のオブジェクトを選択し,「OK」ボタンをクリックしてください。この時点で,選択されたオブジェクトのデータベースの「コメント」欄に実行時の時刻が書き込まれます。「OK」ボタンをクリックすると,第2画面が表示されますから,最下端の「プロパティ」を選択してください。選択されたオブジェクトのプロパティ画面が表示され,データベースへの書き込み処理が行われたことが確認できます。お時間のあるときぜひ試してみてください。

 本日は前回に引き続き,ショートカット・オブジェクトが持つデータベースを取り上げました。Windows XPに搭載されるWindows Messengerなどの最新機能も,ショートカットで管理されていることがお分かりいただけたと思います。また,最新機能へのショートカット・データベースから情報を読み出すことにより,その最新機能の概要を即座に知ることができることもお分かりいただけたと思います。

 次回は,シェル名前空間を指定し,その内部にショートカット・オブジェクトを作成してみましょう。シェル名前空間とショートカットの活用方法を具体的に理解できるようになるはずです。お楽しみに。次回またお会いいたしましょう。ごきげんよう。