スクリプト可能なシェル オブジェクト

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 オブジェクトの一覧を示します。

バージョン 4.71 バージョン 5.00
Folder DIDiskQuotaUser
FolderItemVerb DiskQuotaControl
FolderItemVerbs Folder2
Shell FolderItem
ShellFolderView FolderItems
ShellUIHelper FolderItems2
ShellWindows IShellDispatch2
WebViewFolderContents IShellLinkDual2
ShellFolderItem
ShellFolderViewOC
ShellLinkObject

 

シェル オブジェクトのインスタンス化

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>

前の例では、 sDirFolder オブジェクトへのパスです。 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 ComputerShellSpecialFolderConstants 列挙値です。 ユーザーがフォルダーを選択すると、フォルダーのパスが 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>