Partager via


Objets shell scriptables

L’interpréteur de commandes Windows fournit un ensemble puissant d’objets d’automatisation qui vous permettent de programmer l’interpréteur de commandes avec Microsoft Visual Basic et des langages de script tels que Microsoft JScript (compatible avec la spécification du langage ECMA 262) et Microsoft Visual Basic Scripting Edition (VBScript). Vous pouvez utiliser ces objets pour accéder à de nombreuses fonctionnalités et boîtes de dialogue de l’interpréteur de commandes. Par exemple, vous pouvez accéder au système de fichiers, lancer des programmes et modifier les paramètres système.

Cette section présente les objets Shell pouvant être scripté.

Versions de l’interpréteur de commande

De nombreux objets Shell sont devenus disponibles dans la version 4.71 de l’interpréteur de commandes. D’autres sont disponibles dans les versions 5.00 et ultérieures. La version 5.00 est devenue disponible avec Windows 2000. Le tableau suivant répertorie chaque objet Shell sous la version de l’interpréteur de commandes dans laquelle l’objet est devenu disponible.

Version 4.71 Version 5.00
Dossier DIDiskQuotaUser
FolderItemVerb DiskQuotaControl
FolderItemVerbs Dossier2
Shell FolderItem
ShellFolderView FolderItems
ShellUIHelper FolderItems2
ShellWindows IShellDispatch2
WebViewFolderContents IShellLinkDual2
ShellFolderItem
ShellFolderViewOC
ShellLinkObject

 

Instanciation d’objets Shell

Pour instancier les objets Shell dans les applications Visual Basic avec une liaison anticipée, ajoutez des références aux bibliothèques suivantes dans votre projet :

  • Contrôles Microsoft Internet (SHDocVw)
  • Contrôles et automatisation Microsoft Shell (Shell32)

Liaison tardive

Vous pouvez également instancier de nombreux objets Shell avec une liaison tardive. Cette approche fonctionne dans les applications Visual Basic et dans les scripts. L’exemple suivant montre comment instancier l’objet Shell dans JScript.

<SCRIPT LANGUAGE="JScript">
<!--
    function fnCreateShell()    
    {
        // Instantiate the Shell object and invoke its FileRun method.
        var oShell = new ActiveXObject("shell.application");
        oshell.FileRun;
    }
-->
</SCRIPT>

L’exemple suivant montre comment instancier l’objet Folder dans VBScript.

<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>

Dans l’exemple précédent, sDir est le chemin d’accès à l’objet Folder . Notez que les valeurs d’énumération ShellSpecialFolderConstants ne sont pas disponibles dans le script.

Le ProgID de chacun des objets Shell est indiqué dans le tableau suivant.

Object ProgID
DIDiskQuotaUser Microsoft.DiskQuota.1
DiskQuotaControl Impossible de lier en retard
Dossier Shell. Shell_Application.NameSpace(« ... »)
Dossier2 Shell. Shell_Application.NameSpace(« ... »)
FolderItem Shell. Shell_Application.NameSpace(« ... »). Self ou Folder.Items.Item ou Folder.ParseName
FolderItems Folder.Items
FolderItems2 Folder.Items
FolderItemVerb Shell.NameSpace(« ... »). Self.Verbs.Item()
FolderItemVerbs FolderItem.Verbs ou Shell.NameSpace(« ... »). Self.Verbs
IShellDispatch2 Shell. Shell_Application
IShellLinkDual2 Shell.NameSpace(« ... »). Self.GetLink ou Shell.NameSpace(« ... »). Items(). GetLink
Shell Shell. Shell_Application
ShellFolderItem Shell.NameSpace(« ... »). Self ou Shell.NameSpace(« ... »). Items()
ShellFolderView Impossible de lier en retard
ShellFolderViewOC Impossible de lier en retard
ShellLinkObject Shell.NameSpace(« ... »). Self.GetLink ou Shell.NameSpace(« ... »). Items(). GetLink
ShellUIHelper Impossible de lier en retard
ShellWindows Shell. Shell_Windows ou ShellWindows._NewEnum
WebViewFolderContents Impossible de lier en retard

 

ÉLÉMENT HTML OBJECT

Vous pouvez également utiliser l’élément OBJECT pour instancier des objets Shell sur une page HTML. Pour ce faire, définissez l’attribut ID de l’élément OBJECT sur le nom de variable que vous utiliserez dans vos scripts et identifiez l’objet à l’aide de son numéro inscrit (CLASSID). Le code HTML suivant crée une instance de l’objet ShellFolderItem à l’aide de l’élément OBJECT.

<OBJECT ID="oShFolderItem" 
    NAME="Shell Folder Item Object"
    CLASSID="clsid:2fe352ea-fd1f-11d2-b1f4-00c04f8eeb3e">
</OBJECT>

Le tableau suivant répertorie chaque objet Shell et son CLASSID respectif.

Objet Shell CLASSID
DIDiskQuotaUser 7988B571-EC89-11cf-9C00-00AA00A14F56
DiskQuotaControl 7988B571-EC89-11cf-9C00-00AA00A14F56
Dossier BBCBDE60-C3FF-11CE-8350-4445535400000
Dossier2 f0d2d8ef-3890-11d2-bf8b-00c04fb93661
FolderItem 744129E0-CBE5-11CE-8350-4445535400000
FolderItems 744129E0-CBE5-11CE-8350-4445535400000
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-4445535400000
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

 

Objet Shell

L’objet Shell représente les objets dans l’interpréteur de commandes. Vous pouvez utiliser les méthodes exposées par l’objet Shell pour :

  • Ouvrez, explorez et recherchez des dossiers.
  • Réduire, restaurer, cascader ou mosaïque ouvrir des fenêtres.
  • Lancez Panneau de configuration applications.
  • Afficher les boîtes de dialogue système.

Les utilisateurs sont peut-être plus familiarisés avec les commandes qu’ils accèdent à partir du menu Démarrer et du menu contextuel de la barre des tâches. Le menu contextuel de la barre des tâches s’affiche lorsque les utilisateurs cliquent avec le bouton droit sur la barre des tâches. L’application HTML suivante génère une page de démarrage avec des boutons qui implémentent de nombreuses méthodes de l’objet Shell . Certaines de ces méthodes implémentent des fonctionnalités dans le menu Démarrer et le menu contextuel de la barre des tâches.

<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>

Sécurité

En tant qu’application, un HTA s’exécute sous un modèle de sécurité différent d’une page web. Pour interagir avec une page web qui implémente les fonctionnalités des objets Shell, les utilisateurs doivent activer l’option Initialiser et scripter les contrôles ActiveX non marqués comme sécurisés pour la zone de sécurité dans laquelle ils consultent la page.

Objets de dossier

L’objet Folder représente un dossier Shell. Vous pouvez utiliser les méthodes exposées par l’objet Folder pour :

  • Obtenir des informations sur un dossier.
  • Créez des sous-dossiers.
  • Copiez et déplacez des objets de fichier dans le dossier.

L’objet FolderItem représente un élément dans un dossier Shell. Ses propriétés vous permettent de récupérer des informations sur l’élément. Vous pouvez utiliser les méthodes exposées par cet objet pour exécuter les verbes d’un élément ou pour récupérer des informations sur l’objet FolderItemVerbs d’un élément.

L’objet FolderItems représente une collection d’éléments dans un dossier Shell. Ses méthodes et propriétés vous permettent de récupérer des informations sur la collection.

L’exemple Visual Basic suivant montre la relation entre plusieurs objets de dossier et la façon dont ils peuvent être utilisés ensemble. Lorsque l’utilisateur clique sur le bouton de commande appelé cmdGetPath, le programme affiche une boîte de dialogue qui permet à l’utilisateur de sélectionner un dossier à partir du Poste de travail, où ssfDRIVES est la valeur d’énumération ShellSpecialFolderConstants pour Poste de travail. Lorsque l’utilisateur choisit un dossier, le chemin d’accès du dossier s’affiche dans la zone de texte appelée 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

Dans VBScript, cette fonction est légèrement différente, car les valeurs d’énumération ShellSpecialFolderConstants ne sont pas disponibles dans le script. L’exemple suivant montre l’équivalent VBScript de l’exemple précédent.

<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>

Dans l’exemple JScript suivant, qui est une traduction directe de l’exemple VBScript précédent, notez comment les parenthèses vides « () » sont utilisées pour appeler les méthodes Items et 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>