可編寫腳本的殼層物件

Windows Shell 提供一組功能強大的自動化物件,可讓您使用 Microsoft Visual Basic 撰寫 Shell 的程式設計,以及與 ECMA 262 語言) 規格相容的 Microsoft JScript (,以及 Microsoft Visual Basic Scripting Edition (VBScript) 。 您可以使用這些物件來存取許多 Shell 的功能和對話方塊。 例如,您可以存取檔案系統、啟動程式,以及變更系統設定。

本節介紹可編寫腳本的 Shell 物件。

Shell 版本

許多 Shell 物件在 Shell 4.71 版中變成可用。 其他版本可在 5.00 版和更新版本中取得。 5.00 版已可供 Windows 2000 使用。 下表列出物件可供使用之 Shell 版本下的每個 Shell 物件。

版本 4.71 5.00 版
資料夾 DIDiskQuotaUser
FolderItemVerb DiskQuotaControl
FolderItemVerbs Folder2
Shell FolderItem
ShellFolderView FolderItems
ShellUIHelper FolderItems2
ShellWindows IShellDispatch2
WebViewFolderContents IShellLinkDual2
ShellFolderItem
ShellFolderViewOC
ShellLinkObject

 

具現化 Shell 物件

若要使用早期系結在 Visual Basic 應用程式中具現化 Shell 物件,請在專案中新增下列程式庫的參考:

  • Microsoft Internet Controls (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 列舉值。

下表顯示每個 Shell 物件的 ProgID。

Object 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 殼。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 頁面上具現化 Shell 物件。 若要這樣做,請將 OBJECT 元素的 ID 屬性設定為您將在腳本中使用的變數名稱,並使用其已註冊的數位來識別物件, (CLASSID) 。 下列 HTML 會使用OBJECT元素建立ShellFolderItem物件的實例。

<OBJECT ID="oShFolderItem" 
    NAME="Shell Folder Item Object"
    CLASSID="clsid:2fe352ea-fd1f-11d2-b1f4-00c04f8eeb3e">
</OBJECT>

下表列出每個 Shell 物件及其各自的 CLASSID。

Shell 物件 CLASSID
DIDiskQuotaUser 7988B571-EC89-11cf-9C00-00AA00A14F56
DiskQuotaControl 7988B571-EC89-11cf-9C00-00AA00A14F56
資料夾 類型為60-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 中的物件。 您可以使用 Shell 物件公開的方法:

  • 開啟、探索和流覽資料夾。
  • 最小化、還原、串聯或磚開啟的視窗。
  • 啟動主控台應用程式。
  • 顯示系統對話方塊。

使用者可能最熟悉他們從 [ 開始 ] 功能表和工作列快捷方式功能表存取的命令。 當使用者以滑鼠右鍵按一下工作列時,工作列的快捷方式功能表隨即出現。 下列 HTML 應用程式 (HTA) 會產生一個起始頁面,其中包含實作許多 Shell 物件方法的按鈕。 其中一些方法會在 [ 開始] 功能表和工作列的快捷方式功能表上實作功能。

<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 會在與網頁不同的安全性模型中執行。 若要與實作 Shell 物件功能的網頁互動,使用者必須啟用 [初始化] 和 [腳本][ActiveX 控制項] 未標示為 安全選項,才能檢視頁面的安全性區域。

資料夾物件

Folder物件代表 Shell 資料夾。 您可以使用 Folder 物件公開的方法:

  • 取得資料夾的相關資訊。
  • 建立子資料夾。
  • 將檔案物件複製並移至 資料夾中。

FolderItem物件代表 Shell 資料夾中的專案。 其屬性可讓您擷取專案的相關資訊。 您可以使用這個物件所公開的方法來執行專案的動詞,或擷取專案 FolderItemVerbs 物件的相關資訊。

FolderItems物件代表 Shell 資料夾中的專案集合。 其方法和屬性可讓您擷取集合的相關資訊。

下列 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>

在下列 JScript 範例中,這是上述 VBScript 範例的直接轉譯,請注意如何使用空括弧 ' () ' 來叫用 ItemsItem 方法。

<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>