Scriptbare Shell-objecten
De Windows Shell biedt een krachtige set automatiseringsobjecten waarmee u de Shell kunt programmeren met Microsoft Visual Basic en scripttalen zoals Microsoft JScript (compatibel met ECMA 262-taalspecificatie) en Microsoft Visual Basic Scripting Edition (VBScript). U kunt deze objecten gebruiken voor toegang tot veel van de functies en dialoogvensters van de Shell. U kunt bijvoorbeeld toegang krijgen tot het bestandssysteem, programma's starten en systeeminstellingen wijzigen.
In deze sectie worden de scriptbare Shell-objecten geïntroduceerd.
Shell-versies
Veel shell-objecten zijn beschikbaar in versie 4.71 van de Shell. Andere zijn beschikbaar in versie 5.00 en hoger. Versie 5.00 werd beschikbaar met Windows 2000. De volgende tabel bevat elk Shell-object onder de versie van de Shell waarin het object beschikbaar werd.
Shell-objecten instantiëren
Als u de Shell-objecten in Visual Basic-toepassingen met vroege binding wilt instantiëren, voegt u verwijzingen toe naar de volgende bibliotheken in uw project:
- Microsoft Internet Controls (SHDocVw)
- Microsoft Shell-besturingselementen en automatisering (Shell32)
Late Binding
U kunt ook veel shell-objecten instantiëren met late binding. Deze benadering werkt in Visual Basic-toepassingen en in scripts. In het volgende voorbeeld ziet u hoe u het Shell--object in JScript instantieert.
<SCRIPT LANGUAGE="JScript">
<!--
function fnCreateShell()
{
// Instantiate the Shell object and invoke its FileRun method.
var oShell = new ActiveXObject("shell.application");
oshell.FileRun;
}
-->
</SCRIPT>
In het volgende voorbeeld ziet u hoe u het Map-object in VBScript instantieert.
<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>
In het vorige voorbeeld is sDir- het pad naar het mapobject. Houd er rekening mee dat de ShellSpecialFolderConstants opsommingswaarden niet beschikbaar zijn in script.
De ProgID voor elk van de Shell-objecten wordt weergegeven in de volgende tabel.
Object | ProgID |
---|---|
DIDiskQuotaUser- | Microsoft.DiskQuota.1 |
DiskQuotaControl | Kan niet te laat binden |
map | schelp. Shell_Application.NameSpace("...") |
map2 | schelp. Shell_Application.NameSpace("...") |
FolderItem- | schelp. Shell_Application.NameSpace("..."). Self of Folder.Items.Item of Folder.ParseName |
FolderItems- | Folder.Items |
FolderItems2- | Folder.Items |
FolderItemVerb- | Shell.NameSpace("..."). Self.Verbs.Item() |
FolderItemVerbs- | FolderItem.Verbs of Shell.NameSpace("..."). Self.Verbs |
IShellDispatch2- | schelp. Shell_Application |
IShellLinkDual2- | Shell.NameSpace("..."). Self.GetLink of Shell.NameSpace("..."). Items(). GetLink |
Shell- | schelp. Shell_Application |
ShellFolderItem- | Shell.NameSpace("..."). Self of Shell.NameSpace("..."). Items() |
ShellFolderView- | Kan niet te laat binden |
ShellFolderViewOC- | Kan niet te laat binden |
ShellLinkObject- | Shell.NameSpace("..."). Self.GetLink of Shell.NameSpace("..."). Items(). GetLink |
ShellUIHelper- | Kan niet te laat binden |
ShellWindows- | schelp. Shell_Windows of ShellWindows._NewEnum |
WebViewFolderContents- | Kan niet te laat binden |
HTML OBJECT-element
U kunt ook het element OBJECT gebruiken om Shell-objecten op een HTML-pagina te instantiëren. Hiervoor stelt u de OBJECT element -id kenmerk in op de variabelenaam die u in uw scripts gaat gebruiken en identificeert u het object met behulp van het geregistreerde nummer (CLASSID). Met de volgende HTML maakt u een exemplaar van het ShellFolderItem-object met behulp van het object element.
<OBJECT ID="oShFolderItem"
NAME="Shell Folder Item Object"
CLASSID="clsid:2fe352ea-fd1f-11d2-b1f4-00c04f8eeb3e">
</OBJECT>
De volgende tabel bevat elk Shell-object en de bijbehorende CLASSID.
Shell-object | CLASSID |
---|---|
DIDiskQuotaUser- | 7988B571-EC89-11cf-9C00-00AA00A14F56 |
DiskQuotaControl | 7988B571-EC89-11cf-9C00-00AA00A14F56 |
map | BBCBDE60-C3FF-11CE-8350-444553540000 |
map2 | 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-object
Het Shell--object vertegenwoordigt de objecten in de Shell. U kunt de methoden die door het Shell-object worden weergegeven, gebruiken voor het volgende:
- Open, verken en blader naar mappen.
- Vensters minimaliseren, herstellen, trapsgewijs of tegel openen.
- Start Configuratiescherm-toepassingen.
- Systeemdialoogvensters weergeven.
Gebruikers zijn misschien het meest bekend met de opdrachten die ze openen vanuit het menu Start en het snelmenu van de taakbalk. Het snelmenu van de taakbalk wordt weergegeven wanneer gebruikers met de rechtermuisknop op de taakbalk klikken. De volgende HTML-toepassing (HTA) produceert een startpagina met knoppen die veel van de methoden van de Shell object implementeren. Sommige van deze methoden implementeren functies in het menu Start en het snelmenu van de taakbalk.
<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>
Veiligheid
Als toepassing wordt een HTA uitgevoerd onder een ander beveiligingsmodel dan een webpagina. Om te communiceren met een webpagina die de functionaliteit van de Shell-objecten implementeert, moeten gebruikers de ActiveX-besturingselementen initialiseren en scripten die niet zijn gemarkeerd als veilig optie voor de beveiligingszone waarin ze de pagina bekijken.
Mapobjecten
Het Map-object vertegenwoordigt een Shell-map. U kunt de methoden gebruiken die door het mapobject worden weergegeven voor het volgende:
- Informatie over een map ophalen.
- Maak submappen.
- Kopieer en verplaats bestandsobjecten naar de map.
Het FolderItem-object vertegenwoordigt een item in een Shell-map. Met de eigenschappen kunt u informatie over het item ophalen. U kunt de methoden die door dit object worden weergegeven, gebruiken om de werkwoorden van een item uit te voeren of om informatie op te halen over het FolderItemVerbs-object van een item.
Het FolderItems object vertegenwoordigt een verzameling items in een Shell-map. Met de methoden en eigenschappen kunt u informatie over de verzameling ophalen.
In het volgende Visual Basic-voorbeeld ziet u de relatie tussen verschillende mapobjecten en hoe deze samen kunnen worden gebruikt. Wanneer de gebruiker op de opdrachtknop met de naam cmdGetPathklikt, wordt in het programma een dialoogvenster weergegeven waarmee de gebruiker een map kan selecteren in Mijn computer, waarbij ssfDRIVES de ShellSpecialFolderConstants is opsommingswaarde voor Mijn computer. Wanneer de gebruiker een map kiest, wordt het pad van de map weergegeven in het tekstvak met de naam 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
In VBScript is deze functie enigszins anders omdat de ShellSpecialFolderConstants opsommingswaarden niet beschikbaar zijn in script. In het volgende voorbeeld ziet u het VBScript-equivalent van het vorige voorbeeld.
<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>
In het volgende JScript-voorbeeld, een directe vertaling van het voorgaande VBScript-voorbeeld, ziet u hoe de lege haakjes ()worden gebruikt om de methoden Items en Item aan te roepen.
<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>