スクリプト可能なシェル オブジェクト
Windows シェルには、Microsoft Visual Basic と Microsoft JScript (ECMA 262 言語仕様と互換性がある) や Microsoft Visual Basic Scripting Edition (VBScript) などのスクリプト言語を使用してシェルをプログラミングできる強力なオートメーション オブジェクトのセットが用意されています。 これらのオブジェクトを使用して、シェルの機能とダイアログ ボックスの多くにアクセスできます。 たとえば、ファイル システムにアクセスしたり、プログラムを起動したり、システム設定を変更したりできます。
このセクションでは、スクリプト可能なシェル オブジェクトについて説明します。
シェル のバージョン
シェル オブジェクトの多くは、 バージョン 4.71 の Shell で使用できるようになります。 その他はバージョン 5.00 以降で使用できます。 バージョン 5.00 は Windows 2000 で利用可能になりました。 次の表に、オブジェクトが使用可能になった Shell のバージョンの下にある各 Shell オブジェクトの一覧を示します。
シェル オブジェクトのインスタンス化
Visual Basic アプリケーションで初期バインディングを使用して Shell オブジェクトをインスタンス化するには、プロジェクト内の次のライブラリへの参照を追加します。
- Microsoft インターネット コントロール (SHDocVw)
- Microsoft Shell コントロールとオートメーション (Shell32)
遅延バインディング
また、遅延バインディングを使用して、多くの Shell オブジェクトをインスタンス化することもできます。 この方法は、Visual Basic アプリケーションとスクリプトで機能します。 次の例は、JScript で Shell オブジェクトをインスタンス化する方法を示しています。
<SCRIPT LANGUAGE="JScript">
<!--
function fnCreateShell()
{
// Instantiate the Shell object and invoke its FileRun method.
var oShell = new ActiveXObject("shell.application");
oshell.FileRun;
}
-->
</SCRIPT>
次の例は、VBScript で Folder オブジェクトをインスタンス化する方法を示しています。
<SCRIPT LANGUAGE="VBScript">
<!--
function fnCreateFolder()
dim oShell
dim oFolder
dim sDir
sDir = "C:\SomePath"
set oShell = CreateObject("shell.application")
set oFolder = oShell.NameSpace(sDir)
end function
-->
</SCRIPT>
前の例では、 sDir は Folder オブジェクトへのパスです。 ShellSpecialFolderConstants 列挙値はスクリプトでは使用できません。
次の表に、各シェル オブジェクトの ProgID を示します。
Object | ProgID |
---|---|
DIDiskQuotaUser | Microsoft.DiskQuota.1 |
DiskQuotaControl | 遅延バインドできない |
Folder | シェル。Shell_Application.NameSpace("...") |
Folder2 | シェル。Shell_Application.NameSpace("...") |
FolderItem | シェル。Shell_Application.NameSpace("...")。Self または Folder.Items.Item または Folder.ParseName |
FolderItems | Folder.Items |
FolderItems2 | Folder.Items |
FolderItemVerb | Shell.NameSpace("...")。Self.Verbs.Item() |
FolderItemVerbs | FolderItem.Verbs または Shell.NameSpace("...")。Self.Verbs |
IShellDispatch2 | シェル。Shell_Application |
IShellLinkDual2 | Shell.NameSpace("...")。Self.GetLink または Shell.NameSpace("...")。Items()。GetLink |
Shell | シェル。Shell_Application |
ShellFolderItem | Shell.NameSpace("...")。Self または Shell.NameSpace("...")。Items() |
ShellFolderView | 遅延バインドできない |
ShellFolderViewOC | 遅延バインドできない |
ShellLinkObject | Shell.NameSpace("...")。Self.GetLink または Shell.NameSpace("...")。Items()。GetLink |
ShellUIHelper | 遅延バインドできない |
ShellWindows | シェル。Shell_WindowsまたはShellWindows._NewEnum |
WebViewFolderContents | 遅延バインドできない |
HTML OBJECT 要素
OBJECT 要素を使用して、HTML ページ上のシェル オブジェクトをインスタンス化することもできます。 これを行うには、 OBJECT 要素の ID 属性をスクリプトで使用する変数名に設定し、登録された番号 (CLASSID) を使用してオブジェクトを識別します。 次の HTML は、OBJECT 要素を使用して ShellFolderItem オブジェクトのインスタンスを作成します。
<OBJECT ID="oShFolderItem"
NAME="Shell Folder Item Object"
CLASSID="clsid:2fe352ea-fd1f-11d2-b1f4-00c04f8eeb3e">
</OBJECT>
次の表に、各 Shell オブジェクトとその対応する CLASSID を示します。
シェル オブジェクト | Classid |
---|---|
DIDiskQuotaUser | 7988B571-EC89-11cf-9C00-00AA00A14F56 |
DiskQuotaControl | 7988B571-EC89-11cf-9C00-00AA00A14F56 |
Folder | BBCBDE60-C3FF-11CE-8350-444553540000 |
Folder2 | f0d2d8ef-3890-11d2-bf8b-00c04fb93661 |
FolderItem | 744129E0-CBE5-11CE-8350-444553540000 |
FolderItems | 744129E0-CBE5-11CE-8350-444553540000 |
FolderItems2 | C94F0AD0-F363-11d2-A327-00C04F8EEC7F |
FolderItemVerb | 08EC3E00-50B0-11CF-960C-0080C7F4EE85 |
FolderItemVerbs | 1F8352C0-50B0-11CF-960C-0080C7F4EE85 |
IShellDispatch2 | A4C6892C-3BA9-11d2-9DEA-00C04FB16162 |
IShellLinkDual2 | 317EE249-F12E-11d2-B1E4-00C04F8EEB3E |
Shell | 13709620-C279-11CE-A49E-444553540000 |
ShellFolderItem | 2fe352ea-fd1f-11d2-b1f4-00c04f8eeb3e |
ShellFolderView | 62112AA1-EBE4-11cf-A5FB-0020AFE7292D |
ShellFolderViewOC | 4a3df050-23bd-11d2-939f-00a0c91eedba |
ShellLinkObject | 11219420-1768-11d1-95BE-00609797EA4F |
ShellUIHelper | 64AB4BB7-111E-11D1-8F79-00C04FC2FBE1 |
ShellWindows | 9BA05972-F6A8-11CF-A442-00A0C90A8F39 |
WebViewFolderContents | 1820FED0-473E-11D0-A96C-00C04FD705A2 |
シェル オブジェクト
Shell オブジェクトは、 Shell 内のオブジェクトを表します。 Shell オブジェクトによって公開されるメソッドを使用すると、次のことができます。
- フォルダーを開き、探索し、参照します。
- ウィンドウを開くウィンドウを最小化、復元、カスケード、またはタイルします。
- コントロール パネルアプリケーションを起動します。
- システム ダイアログ ボックスを表示します。
ユーザーは、[ スタート] メニューとタスク バーのショートカット メニューからアクセスするコマンドに最も精通している可能性があります。 タスク バーを右クリックすると、タスク バーのショートカット メニューが表示されます。 次の HTML アプリケーション (HTA) は、 シェル オブジェクトのメソッドの多くを実装するボタンを含むスタート ページを生成します。 これらのメソッドの一部では、[ スタート ] メニューとタスク バーのショートカット メニューに機能が実装されています。
<HTML>
<HEAD>
<TITLE>Start Page</TITLE>
<OBJECT ID="oShell"
CLASSID="clsid:13709620-C279-11CE-A49E-444553540000">
</OBJECT>
<STYLE>
INPUT {width: 200}
</STYLE>
<SCRIPT LANGUAGE="VBScript">
<!--
function fnStart(sMethod)
select case sMethod
case 0
'Minimizes all windows on the desktop
oshell.Shell_MinimizeAll
case 1
'Displays the Run dialog box
oshell.FileRun
case 2
'Displays the Shut Down Windows dialog box
oshell.Shell_ShutdownWindows
case 3
'Displays the Find dialog box
oshell.Shell_FindFilesr
case 4
'Displays the Date/Time dialog box
oshell.Shell_SetTime
case 5
'Displays the Internet Properties dialog box
oshell.Shell_ControlPanelItem "INETCPL.cpl"
case 6
'Explores the My Documents folder
oshell.Shell_Explore "C:\My Documents"
case 7
'Enables user to select folder from Program Files
oshell.Shell_BrowseForFolder 0, "My Programs", 0, "C:\Program Files"
case 8
'Opens the Favorites folder
oshell.Shell_Open "C:\WINDOWS\Favorites"
case 9
'Displays the Taskbar Properties dialog box
oshell.Shell_TrayProperties
end select
end function
-->
</SCRIPT>
</HEAD>
<BODY>
<H1>Start...</H1>
<INPUT type="button" value="Edit Taskbar Properties" onclick="fnStart(9)"><br>
<INPUT type="button" value="Open Favorites Folder" onclick="fnStart(8)"><br>
<INPUT type="button" value="Browse Program Files" onclick="fnStart(7)"><br>
<INPUT type="button" value="Explore My Documents" onclick="fnStart(6)"><br>
<INPUT type="button" value="Modify Internet Properties" onclick="fnStart(5)"><br>
<INPUT type="button" value="Set System Time" onclick="fnStart(4)"><br>
<INPUT type="button" value="Find a File or Folder" onclick="fnStart(3)"><br>
<INPUT type="button" value="Shut Down Windows" onclick="fnStart(2)"><br>
<INPUT type="button" value="Run" onclick="fnStart(1)">
<INPUT type="button" value="Minimize All Windows" onclick="fnStart(0)">
</BODY>
</HTML>
セキュリティ
アプリケーションとして、HTA は Web ページとは異なるセキュリティ モデルで実行されます。 シェル オブジェクトの機能を実装する Web ページを操作するには、ユーザーがページを表示しているセキュリティ ゾーンに対して [ActiveX コントロールの初期化とスクリプトを安全としてマークされていない ] オプションを有効にする必要があります。
フォルダー オブジェクト
Folder オブジェクトはシェル フォルダーを表します。 Folder オブジェクトによって公開されるメソッドを使用すると、次のことができます。
- フォルダーに関する情報を取得します。
- サブフォルダーを作成します。
- ファイル オブジェクトをコピーしてフォルダーに移動します。
FolderItem オブジェクトは、シェル フォルダー内のアイテムを表します。 そのプロパティを使用すると、アイテムに関する情報を取得できます。 このオブジェクトによって公開されるメソッドを使用して、アイテムの動詞を実行したり、アイテムの FolderItemVerbs オブジェクトに関する情報を取得したりできます。
FolderItems オブジェクトは、シェル フォルダー内の項目のコレクションを表します。 そのメソッドとプロパティを使用すると、コレクションに関する情報を取得できます。
次の Visual Basic の例は、いくつかのフォルダー オブジェクト間の関係と、それらのオブジェクトを一緒に使用する方法を示しています。 ユーザーが cmdGetPath というコマンド ボタンをクリックすると、ユーザーがマイ コンピューターからフォルダーを選択できるようにするダイアログ ボックスが表示されます。ここで、ssfDRIVES は My Computer の ShellSpecialFolderConstants 列挙値です。 ユーザーがフォルダーを選択すると、フォルダーのパスが txtPath というテキスト ボックスに表示されます。
Private Sub cmdGetPath_Click()
Dim oShell As New Shell
Dim oFolder As Folder
Dim oFolderItem As FolderItem
Set oFolder = oshell.Shell_BrowseForFolder(Me.hWnd, "Select a Folder", 0, ssfDrives)
Set oFolderItem = oFolderItems.Item
txtPath.Text = oFolderItem.Path
End Sub
VBScript では、 ShellSpecialFolderConstants 列挙値がスクリプトで使用できないため、この関数は若干異なります。 次の例は、前の例と同等の VBScript を示しています。
<SCRIPT LANGUAGE="VBScript">
<!--
function fnGetMyPathVB()
dim oShell
dim oFolder
dim oFolderItem
set oShell = CreateObject("shell.application")
set oFolder = oshell.Shell_BrowseForFolder(0, "Choose a Folder", 0)
set oFolderItem = oFolder.Items.Item
document.all.item("myPath").innerText = oFolderItem.Path
end function
-->
</SCRIPT>
前の VBScript の例の直接翻訳である次の JScript の例では、空のかっこ '()' を使用して Items メソッドと Item メソッドを呼び出す方法に注意してください。
<SCRIPT LANGUAGE="JavaScript">
<!--
function fnGetMyPathJ()
{
var oShell = new ActiveXObject("shell.application");
var oFolder = new Object;
oFolder = oshell.Shell_BrowseForFolder(0, "Choose a folder", 0);
var oFolderItem = new Object;
oFolderItem = oFolder.Items().Item();
document.all.item("myPath").innerText = oFolderItem.Path;
}
-->
</SCRIPT>