連載
» 2007年12月27日 00時00分 公開

基礎解説 演習方式で身につけるチェック式WSH超入門:第14回 WshShellオブジェクトを利用する(3) (3/4)

[牟田口大介(Microsoft MVP Windows Server - Admin Frameworks),著]

特殊フォルダを取得するSpecialFoldersプロパティとWshSpecialFoldersオブジェクト

 これまでは、特殊フォルダを取得するにはレジストリ・エントリを読み込んでいたが、実はもっと簡単に特殊フォルダを取得する方法がある。SpecialFoldersプロパティと、このプロパティが返すWshSpecialFoldersオブジェクト(コレクション)を用いる方法だ。WshSpecialFoldersコレクションには特殊フォルダの名前とパスが含まれている。コレクションなのでFor 〜 Each 〜 Nextステートメントで値の列挙が可能である。また、CountメソッドやLengthプロパティで個数も取得できる。

Option Explicit

Dim objWshShell
Set objWshShell = WScript.CreateObject("WScript.Shell")

Dim objSpecialFolders, strSpecialFolder, strOutput
strOutput = ""
'SpecialFoldersプロパティの返すWshSpecialFoldersコレクションを変数に格納
Set objSpecialFolders = objWshShell.SpecialFolders

'WshSpecialFoldersコレクションの中身を列挙
For Each strSpecialFolder In objSpecialFolders
    strOutput = strOutput & strSpecialFolder & vbCrLf
Next

MsgBox strOutput & "(計" & objSpecialFolders.Count & ")"

Set objSpecialFolders = Nothing
Set objWshShell = Nothing

 このスクリプトの実行結果は次のようになる。

WshSpecialFoldersコレクションの要素を列挙した例
このように、特殊フォルダのフルパスの一覧が取得できる。

 このように特殊フォルダの一覧を取得することができた。実際は特定の(例えば「すべてのユーザーのスタート メニュー」の)特殊フォルダのパスを知りたいときに使う。それには次のようにする。

Option Explicit

Dim objWshShell
Set objWshShell = WScript.CreateObject("WScript.Shell")

MsgBox objWshShell.SpecialFolders.Item("AllUsersStartMenu")

 結果は次のようになる。

特定の特殊フォルダのパスを取得する例
「すべてのユーザーのスタート メニュー」フォルダを取得している。

 なおItemプロパティは既定(デフォルトの)プロパティなので、省略して

MsgBox objWshShell.SpecialFolders("AllUsersStartMenu")

と記述することもできる。

 さて、ここでは「すべてのユーザーのスタート メニュー」フォルダのパスを知るときには「AllUsersStartMenu」をItemプロパティの引数に渡せばいいことが分かったが、ほかのフォルダは次のようになっている。

特殊フォルダ名(Itemプロパティの引数) 特殊フォルダの説明
AllUsersDesktop すべてのユーザーのデスクトップ
AllUsersStartMenu すべてのユーザーのスタート・メニュー
AllUsersPrograms すべてのユーザーのスタート・メニュー配下のプログラム
AllUsersStartup すべてのユーザーのスタートアップ
Desktop 現在のユーザーのデスクトップ
Favorites 現在のユーザーのお気に入り
Fonts フォント
MyDocuments 現在のユーザーのマイ・ドキュメント
NetHood 現在のユーザーのネットフォルダ
PrintHood 現在のユーザーのプリンタ・フォルダ
Programs 現在のユーザーのスタート・メニュー配下のプログラム
Recent 現在のユーザーの最近使ったファイル
SendTo 現在のユーザーの送る
StartMenu 現在のユーザーのスタート・メニュー
Startup 現在のユーザーのスタートアップ
Templates 現在のユーザーのテンプレート
AppData 現在のユーザーのアプリケーションのデータ
Itemプロパティの引数として渡す特殊フォルダ名
ヘルプには「AppData」の記載がない。また、コレクション内にはDesktopがなぜか2つあるが何らかの実装ミスであろう。

 この表に従って、知りたい特殊フォルダの位置を簡単に調べることができる。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。