共用方式為


可編寫腳本的Shell物件

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

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

Shell 版本

許多Shell物件可在Shell 4.71版 中使用。 其他版本適用於5.00版和更新版本。 版本 5.00 可供 Windows 2000 使用。 下表列出每個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因特網控件 (SHDocVw)
  • Microsoft殼層控件和自動化 (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 列舉值。

下表顯示每個Shell物件的 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 殼。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 專案的 標識碼 屬性設定為您將用於腳本中的變數名稱,並使用其已註冊號碼來識別物件。 下列 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
資料夾 BBCBDE60-C3FF-11CE-8350-44553540000
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 是 ShellSpecialFolderConstantsMy Computer列舉值。 當使用者選擇資料夾時,資料夾的路徑會顯示在名為 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 範例的直接轉譯,請注意如何使用空括弧 '()' 來叫用 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>