可編寫腳本的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物件,其版本底下的物件可供使用。
具現化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>