スクリプト可能なシェル オブジェクト
Windows シェルには、Microsoft Visual Basic とスクリプト言語 (ECMA 262 言語仕様と互換性があります) や Microsoft Visual Basic Scripting Edition (VBScript) などのスクリプト言語を使用してシェルをプログラミングできる強力なオートメーション オブジェクトのセットが用意されています。 これらのオブジェクトを使用して、シェルの機能とダイアログ ボックスの多くにアクセスできます。 たとえば、ファイル システムにアクセスしたり、プログラムを起動したり、システム設定を変更したりできます。
このセクションでは、スクリプト可能なシェル オブジェクトについて説明します。
シェルのバージョン
シェル オブジェクトの多くは、シェル バージョン 4.71 で使用できるようになります。 その他はバージョン 5.00 以降で使用できます。 バージョン 5.00 は Windows 2000 で使用できるようになります。 次の表に、オブジェクトが使用可能になった Shell のバージョンの下の各 Shell オブジェクトを示します。
バージョン 4.71 | バージョン 5.00 |
---|---|
フォルダーの | DIDiskQuotaUser |
FolderItemVerbの | DiskQuotaControlの |
FolderItemVerbs | Folder2 |
シェル | FolderItem |
ShellFolderView | FolderItems |
ShellUIHelperの | FolderItems2 |
ShellWindowsの | IShellDispatch2の |
WebViewFolderContents | IShellLinkDual2の |
ShellFolderItem | |
ShellFolderViewOC | |
ShellLinkObject |
シェル オブジェクトのインスタンス化
初期バインディングを使用して Visual Basic アプリケーションのシェル オブジェクトをインスタンス化するには、プロジェクト内の次のライブラリへの参照を追加します。
- Microsoft Internet Controls (SHDocVw)
- Microsoft シェル コントロールとオートメーション (Shell32)
遅延バインディング
遅延バインディングを使用して、シェル オブジェクトの多くをインスタンス化することもできます。 このアプローチは、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 を次の表に示します。
オブジェクト | ProgID |
---|---|
DIDiskQuotaUser | Microsoft.DiskQuota.1 |
DiskQuotaControlの | 遅延バインドできない |
フォルダーの | 貝。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_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>
次の表に、各シェル オブジェクトとそれぞれの CLASSID を示します。
シェル オブジェクト | CLASSID |
---|---|
DIDiskQuotaUser | 7988B571-EC89-11cf-9C00-00AA00A14F56 |
DiskQuotaControlの | 7988B571-EC89-11cf-9C00-00AA00A14F56 |
フォルダーの | 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 |
シェル | 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 オブジェクトは、シェル内のオブジェクトを表します。 シェル オブジェクトによって公開されるメソッドを使用すると、次のことができます。
- フォルダーを開き、探索し、参照します。
- ウィンドウを最小化、復元、カスケード、またはタイルで開きます。
- コントロール パネル アプリケーションを起動します。
- システム ダイアログ ボックスを表示します。
ユーザーは、の [スタート] メニューとタスク バーのショートカット メニューからアクセスするコマンドに最も精通している可能性があります。 ユーザーがタスク バーを右クリックすると、タスク バーのショートカット メニューが表示されます。 次の 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 ページを操作するには、ユーザーがページを表示しているセキュリティ ゾーンに対して Initialize および script ActiveX Controls not marked as safe option を有効にする必要があります。
フォルダー オブジェクト
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>