可編寫腳本的殼層物件
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 物件。
具現化 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>
在上述範例中, sDir 是 Folder 物件的路徑。 請注意,腳本中無法使用 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 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>
在下列 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>