テキストファイルのすべての内容を読み込むコードは、スクリプトを記述する際によく利用するものですので、もし理解があいまいであれば、先述の別稿で知識を再確認しておくことをお勧めします。それでは、以降は、今回新たに登場した構文について、説明していくことにしましょう。説明の番号はリスト内のコメントに振られた番号に対応しています。
(1)WshShellオブジェクトを生成する
WshShellオブジェクトはシェル本体に関わるさまざまな機能を提供するオブジェクトです。具体的には、今回紹介するショートカットの作成やシステムフォルダへのアクセス、レジストリの編集、プログラムの実行、イベントログの記録などを行うときに使用します。オブジェクトを生成するには、(これまでに何度か見てきたように)WScript.CreateObjectメソッドを使うのでしたね。プログラムID(オブジェクトを識別する一意な名前)には"WScript.Shell"と指定します。
(2)特殊なフォルダへのパスを取得する
冒頭述べたように、このサンプルではショートカットをデスクトップに生成するのでした。デスクトップのパスはスクリプトの中に直接書くこともできますが、「C:\Documents and Settings\User11\デスクトップ」のように利用者によって異なるパスを、スクリプトにハードコーディングしてしまうことは好ましくありません(異なる環境では、正しくスクリプトが動作しなくなる可能性があります)。
そこで登場するのが、WshShellオブジェクトのSpecialFoldersプロパティなのです。
[構文]SpecialFoldersプロパティ
WshShellオブジェクト.SpecialFolders(特殊フォルダ名)
SpecialFoldersプロパティを利用することで、デスクトップやマイドキュメントなどの特殊なフォルダへのパスを環境に応じて取得できますので、スクリプトを他のパソコンで使う場合にもコードに影響が出にくくなります。SpecialFoldersプロパティの引数として指定可能なフォルダ名には、以下のようなものがあります。
SpecialFoldersプロパティで利用可能なフォルダ名
フォルダ名 | 概要 |
---|---|
AllUsersDesktop | 全ユーザのデスクトップ |
AllUsersStartMenu | 全ユーザのスタートメニュー |
AllUsersPrograms | 全ユーザのプログラムフォルダ |
AllUsersStartup | 全ユーザのスタートアップメニュー |
Desktop | デスクトップ |
Favorites | お気に入り |
Fonts | フォント |
MyDocuments | マイドキュメント |
NetHood | マイネットワーク |
PrintHood | プリンタ |
Programs | プログラムフォルダ |
Recent | 最近使ったファイル |
SendTo | [送る]フォルダ |
StartMenu | スタートメニュー |
Startup | スタートアップメニュー |
Templates | テンプレートフォルダ |
ここでは、SpecialFoldersプロパティでデスクトップへのパスを取得した上で、ショートカットの名前と連結することで、「C:\Documents and Settings\Yamada\デスクトップ\秀丸.lnk」のようなパスを生成しているわけです(ショートカットの拡張子は「.lnk」です)。
ここで使っているBuildPathメソッドについては、「テキスト読み書き編」でも触れています。
(3)ショートカットを生成するのはCreateShortcutメソッド
ショートカットを新規に作成するのは、WshShellオブジェクトのCreateShortcutメソッドを使用します。
[構文]CreateShortcutメソッド
Set オブジェクト変数 = WshShellオブジェクト.CreateShortcut(パス)
CreateShortcutメソッドの引数には、先ほど作成しておいたショートカット自体のパスを指定します。CreateShortcutメソッドはショートカットの作成に成功すると、ショートカット自体を表すWshShortcutオブジェクトを返します。CreateShortcutメソッドはWshShortcutオブジェクトを返すだけで、この時点ではショートカットそのものを作成(保存)しているわけではありませんので、注意してください。
ちなみに、ここではローカルファイルへのショートカットなので、拡張子は「.lnk」としていますが、CreateShortcutメソッドではインターネットショートカットを作成することもできます。その場合は、拡張子は「.url」とする必要があります。また、戻り値も(WshShortcutオブジェクトではなく)WshUrlShortcutオブジェクトが返されます。