Objetos de Shell que admiten scripts

El Shell de Windows proporciona un conjunto eficaz de objetos de automatización que permiten programar el Shell con Microsoft Visual Basic y lenguajes de scripting como Microsoft JScript (compatible con la especificación del lenguaje ECMA 262) y Microsoft Visual Basic Scripting Edition (VBScript). Puede usar estos objetos para acceder a muchas de las características y cuadros de diálogo del Shell. Por ejemplo, puede acceder al sistema de archivos, iniciar programas y cambiar la configuración del sistema.

En esta sección se presentan los objetos shell que admiten scripts.

Versiones del shell

Muchos de los objetos shell estuvieron disponibles en la versión 4.71 del Shell. Otros están disponibles en la versión 5.00 y posteriores. La versión 5.00 se puso a disposición de Windows 2000. En la tabla siguiente se muestra cada objeto shell en la versión de Shell en la que el objeto estaba disponible.

Versión 4.71 Versión 5.00
Carpeta DIDiskQuotaUser
FolderItemVerb DiskQuotaControl
FolderItemVerbs Carpeta2
Shell FolderItem
ShellFolderView FolderItems
ShellUIHelper FolderItems2
ShellWindows IShellDispatch2
WebViewFolderContents IShellLinkDual2
ShellFolderItem
ShellFolderViewOC
ShellLinkObject

 

Creación de instancias de objetos de Shell

Para crear instancias de los objetos shell en aplicaciones de Visual Basic con enlace anticipado, agregue referencias a las siguientes bibliotecas del proyecto:

  • Controles de Microsoft Internet (SHDocVw)
  • Controles y automatización de Microsoft Shell (Shell32)

Enlace en tiempo de demora

También puede crear instancias de muchos de los objetos shell con enlace en tiempo de demora. Este enfoque funciona en aplicaciones de Visual Basic y en script. En el ejemplo siguiente se muestra cómo crear una instancia del objeto Shell en JScript.

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

En el ejemplo siguiente se muestra cómo crear una instancia del objeto Folder en 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>

En el ejemplo anterior, sDir es la ruta de acceso al objeto Folder . Tenga en cuenta que los valores de enumeración ShellSpecialFolderConstants no están disponibles en el script.

El ProgID para cada uno de los objetos shell se muestra en la tabla siguiente.

Object ProgID
DIDiskQuotaUser Microsoft.DiskQuota.1
DiskQuotaControl No se puede enlazar en tiempo de demora
Carpeta Cáscara. Shell_Application.NameSpace("...")
Carpeta2 Cáscara. Shell_Application.NameSpace("...")
FolderItem Cáscara. Shell_Application.NameSpace("..."). Self o Folder.Items.Item o Folder.ParseName
FolderItems Folder.Items
FolderItems2 Folder.Items
FolderItemVerb Shell.NameSpace("..."). Self.Verbs.Item()
FolderItemVerbs FolderItem.Verbs o Shell.NameSpace("..."). Self.Verbs
IShellDispatch2 Cáscara. Shell_Application
IShellLinkDual2 Shell.NameSpace("..."). Self.GetLink o Shell.NameSpace("..."). Items(). GetLink
Shell Cáscara. Shell_Application
ShellFolderItem Shell.NameSpace("..."). Self o Shell.NameSpace("..."). Items()
ShellFolderView No se puede enlazar en tiempo de demora
ShellFolderViewOC No se puede enlazar en tiempo de demora
ShellLinkObject Shell.NameSpace("..."). Self.GetLink o Shell.NameSpace("..."). Items(). GetLink
ShellUIHelper No se puede enlazar en tiempo de demora
ShellWindows Cáscara. Shell_Windows o ShellWindows._NewEnum
WebViewFolderContents No se puede enlazar en tiempo de demora

 

Elemento OBJECT HTML

También puede usar el elemento OBJECT para crear instancias de objetos shell en una página HTML. Para ello, establezca el atributo ID del elemento OBJECT en el nombre de variable que usará en los scripts e identifique el objeto mediante su número registrado (CLASSID). El código HTML siguiente crea una instancia del objeto ShellFolderItem mediante el elemento OBJECT .

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

En la tabla siguiente se enumeran cada objeto shell y su CLASSID respectivo.

Shell (objeto) CLASSID
DIDiskQuotaUser 7988B571-EC89-11cf-9C00-00AA00A14F56
DiskQuotaControl 7988B571-EC89-11cf-9C00-00AA00A14F56
Carpeta BBCBDE60-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 (objeto)

El objeto Shell representa los objetos del Shell. Puede usar los métodos expuestos por el objeto Shell para:

  • Abra, explore y busque carpetas.
  • Minimice, restaure, en cascada o ventanas abiertas en mosaico.
  • Inicie aplicaciones Panel de control.
  • Mostrar cuadros de diálogo del sistema.

Es posible que los usuarios estén más familiarizados con los comandos a los que acceden desde el menú Inicio y el menú contextual de la barra de tareas. El menú contextual de la barra de tareas aparece cuando los usuarios hacen clic con el botón derecho en la barra de tareas. La siguiente aplicación HTML (HTA) genera una página de inicio con botones que implementan muchos de los métodos del objeto Shell . Algunos de estos métodos implementan características en el menú Inicio y el menú contextual de la barra de tareas.

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

Seguridad

Como aplicación, un HTA se ejecuta en un modelo de seguridad diferente al de una página web. Para interactuar con una página web que implemente la funcionalidad de los objetos shell, los usuarios deben habilitar los controles ActiveX inicializar y generar scripts que no estén marcados como opción segura para la zona de seguridad en la que ven la página.

Objetos de carpeta

El objeto Folder representa una carpeta shell. Puede usar los métodos expuestos por el objeto Folder para:

  • Obtenga información sobre una carpeta.
  • Cree subcarpetas.
  • Copie y mueva objetos de archivo a la carpeta .

El objeto FolderItem representa un elemento de una carpeta shell. Sus propiedades permiten recuperar información sobre el elemento. Puede usar los métodos expuestos por este objeto para ejecutar los verbos de un elemento o para recuperar información sobre el objeto FolderItemVerbs de un elemento.

El objeto FolderItems representa una colección de elementos de una carpeta shell. Sus métodos y propiedades permiten recuperar información sobre la colección.

En el siguiente ejemplo de Visual Basic se muestra la relación entre varios de los objetos de carpeta y cómo se pueden usar juntos. Cuando el usuario hace clic en el botón de comando denominado cmdGetPath, el programa muestra un cuadro de diálogo que permite al usuario seleccionar una carpeta de Mi equipo, donde ssfDRIVES es el valor de enumeración ShellSpecialFolderConstants para Mi equipo. Cuando el usuario elige una carpeta, la ruta de acceso de la carpeta se muestra en el cuadro de texto denominado 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

En VBScript, esta función es ligeramente diferente porque los valores de enumeración ShellSpecialFolderConstants no están disponibles en el script. En el ejemplo siguiente se muestra el equivalente de VBScript del ejemplo anterior.

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

En el siguiente ejemplo de JScript, que es una traducción directa del ejemplo de VBScript anterior, observe cómo se usan los paréntesis vacíos '()' para invocar los métodos Items y 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>