Delen via


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.

Versie 4.71 Versie 5.00
map DIDiskQuotaUser-
FolderItemVerb- DiskQuotaControl
FolderItemVerbs- map2
Shell- FolderItem-
ShellFolderView- FolderItems-
ShellUIHelper- FolderItems2-
ShellWindows- IShellDispatch2-
WebViewFolderContents- IShellLinkDual2-
ShellFolderItem-
ShellFolderViewOC-
ShellLinkObject-

 

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>