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