Skriptfähige Shellobjekte
Die Windows Shell bietet einen leistungsstarken Satz von Automatisierungsobjekten, mit denen Sie die Shell mit Microsoft Visual Basic und Skriptsprachen wie Microsoft JScript (kompatibel mit ECMA 262-Sprachspezifikation) und Microsoft Visual Basic Scripting Edition (VBScript) programmieren können. Sie können diese Objekte verwenden, um auf viele Funktionen und Dialogfelder der Shell zuzugreifen. Beispielsweise können Sie auf das Dateisystem zugreifen, Programme starten und Systemeinstellungen ändern.
In diesem Abschnitt werden die skriptfähigen Shellobjekte vorgestellt.
Shellversionen
Viele der Shell-Objekte wurden in Version 4.71 der Shell verfügbar. Andere sind in Version 5.00 und höher verfügbar. Version 5.00 wurde mit Windows 2000 verfügbar. In der folgenden Tabelle wird jedes Shell-Objekt unter der Version der Shell aufgelistet, in der das Objekt verfügbar wurde.
Instanziieren von Shellobjekten
Um die Shell-Objekte in Visual Basic Anwendungen mit frühzeitiger Bindung zu instanziieren, fügen Sie Verweise auf die folgenden Bibliotheken in Ihrem Projekt hinzu:
- Microsoft Internet Controls (SHDocVw)
- Microsoft Shell-Steuerelemente und -Automatisierung (Shell32)
Späte Bindung
Sie können auch viele der Shell-Objekte mit später Bindung instanziieren. Dieser Ansatz funktioniert in Visual Basic Anwendungen und im Skript. Das folgende Beispiel zeigt, wie das Shell-Objekt in JScript instanziiert wird.
<SCRIPT LANGUAGE="JScript">
<!--
function fnCreateShell()
{
// Instantiate the Shell object and invoke its FileRun method.
var oShell = new ActiveXObject("shell.application");
oshell.FileRun;
}
-->
</SCRIPT>
Das folgende Beispiel zeigt, wie das Folder-Objekt in VBScript instanziiert wird.
<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>
Im vorherigen Beispiel ist sDir der Pfad zum Folder-Objekt. Beachten Sie, dass die ShellSpecialFolderConstants-Enumerationswerte im Skript nicht verfügbar sind.
Die ProgID für jedes der Shell-Objekte wird in der folgenden Tabelle angezeigt.
| Object | ProgID |
|---|---|
| DIDiskQuotaUser | Microsoft.DiskQuota.1 |
| DiskQuotaControl | Spätes Binden nicht mehr |
| Ordner | Muschel. Shell _ Application.NameSpace("...") |
| Ordner2 | Muschel. Shell _ Application.NameSpace("...") |
| FolderItem | Muschel. _Shellanwendung.NameSpace("..."). Self oder Folder.Items.Item oder Folder.ParseName |
| FolderItems | Folder.Items |
| FolderItems2 | Folder.Items |
| FolderItemVerb | Shell.NameSpace("..."). Self.Verbs.Item() |
| FolderItemVerbs | FolderItem.Verbs oder Shell.NameSpace("..."). Self.Verbs |
| IShellDispatch2 | Muschel. _Shellanwendung |
| IShellLinkDual2 | Shell.NameSpace("..."). Self.GetLink oder Shell.NameSpace("..."). Items(). GetLink |
| Shell | Muschel. _Shellanwendung |
| ShellFolderItem | Shell.NameSpace("..."). Self oder Shell.NameSpace("..."). Items() |
| ShellFolderView | Spätes Binden nicht mehr |
| ShellFolderViewOC | Spätes Binden nicht mehr |
| ShellLinkObject | Shell.NameSpace("..."). Self.GetLink oder Shell.NameSpace("..."). Items(). GetLink |
| ShellUIHelper | Spätes Binden nicht mehr |
| ShellWindows | Muschel. Shell _ Windows oder ShellWindows. _ NewEnum |
| WebViewFolderContents | Spätes Binden nicht mehr |
HTML OBJECT-Element
Sie können auch das OBJECT-Element verwenden, um Shell-Objekte auf einer HTML-Seite zu instanziieren. Legen Sie hierzu das ID-Attribut des OBJECT-Elements auf den Variablennamen fest, den Sie in Ihren Skripts verwenden möchten, und identifizieren Sie das Objekt mithilfe seiner registrierten Nummer (CLASSID). Der folgende HTML-Code erstellt eine Instanz des ShellFolderItem-Objekts mithilfe des OBJECT-Elements.
<OBJECT ID="oShFolderItem"
NAME="Shell Folder Item Object"
CLASSID="clsid:2fe352ea-fd1f-11d2-b1f4-00c04f8eeb3e">
</OBJECT>
In der folgenden Tabelle sind jedes Shell-Objekt und die entsprechende CLASSID aufgeführt.
| Shellobjekt | CLASSID |
|---|---|
| DIDiskQuotaUser | 7988B571-EC89-11cf-9C00-00AA00A14F56 |
| DiskQuotaControl | 7988B571-EC89-11cf-9C00-00AA00A14F56 |
| Ordner | BBBDE60-C3FF-11CE-8350-444553540000 |
| Ordner2 | 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-Objekt
Das Shell-Objekt stellt die Objekte in der Shell dar. Sie können die vom Shell-Objekt verfügbar gemachten Methoden für Die folgenden Methoden verwenden:
- Öffnen Sie Ordner, untersuchen Sie sie, und suchen Sie nach ordnern.
- Minimieren, Wiederherstellen, Kaskadieren oder Öffnen von Kachelfenstern.
- Starten Systemsteuerung Anwendungen.
- Anzeigen von Systemdialogfeldern.
Benutzer sind möglicherweise am besten mit den Befehlen vertraut, auf die sie über das Startmenü und das Kontextmenü der Taskleiste zugreifen. Das Kontextmenü der Taskleiste wird angezeigt, wenn Benutzer mit der rechten Maustaste auf die Taskleiste klicken. Die folgende HTML-Anwendung (HTA) erzeugt eine Startseite mit Schaltflächen, die viele der Methoden des Shell-Objekts implementieren. Einige dieser Methoden implementieren Features im Startmenü und im Kontextmenü der Taskleiste.
<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>
Sicherheit
Als Anwendung wird ein HTA unter einem anderen Sicherheitsmodell als eine Webseite ausgeführt. Um mit einer Webseite zu interagieren, die die Funktionalität der Shellobjekte implementiert, müssen Benutzer die Option Initialisieren und Skript ActiveX-Steuerelemente aktivieren, die nicht als sicher markiert sind für die Sicherheitszone, in der sie die Seite anzeigen.
Ordnerobjekte
Das Folder-Objekt stellt einen Shellordner dar. Sie können die vom Ordnerobjekt verfügbar gemachten Methoden für Die folgenden Methoden verwenden:
- Hier finden Sie Informationen zu einem Ordner.
- Erstellen Sie Unterordner.
- Kopieren und verschieben Sie Dateiobjekte in den Ordner .
Das FolderItem-Objekt stellt ein Element in einem Shellordner dar. Mit den Eigenschaften können Sie Informationen zum Element abrufen. Sie können die von diesem Objekt verfügbar gemachten Methoden verwenden, um die Verben eines Elements oder Informationen über das FolderItemVerbs-Objekt eines Elements abzurufen.
Das FolderItems-Objekt stellt eine Auflistung von Elementen in einem Shellordner dar. Mit den Methoden und Eigenschaften können Sie Informationen zur Auflistung abrufen.
Das folgende Visual Basic zeigt die Beziehung zwischen mehreren ordnerobjekten und wie sie zusammen verwendet werden können. Wenn der Benutzer auf die Befehlsschaltfläche cmdGetPath klickt, zeigt das Programm ein Dialogfeld an, in dem der Benutzer einen Ordner aus Arbeitsplatz auswählen kann, wobei ssfDRIVES der ShellSpecialFolderConstants-Enumerationswert für Arbeitsplatz. Wenn der Benutzer einen Ordner auswählt, wird der Pfad des Ordners im Textfeld txtPath angezeigt.
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
In VBScript ist diese Funktion etwas anders, da die ShellSpecialFolderConstants-Enumerationswerte im Skript nicht verfügbar sind. Das folgende Beispiel zeigt die VBScript-Entsprechung des vorherigen Beispiels.
<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>
Beachten Sie JScript folgenden Beispiel, bei dem es sich um eine direkte Übersetzung des vorherigen VBScript-Beispiels handelt, wie die leeren Klammern "()" zum Aufrufen der Items- und Item-Methoden verwendet werden.
<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>