Objetos shell que podem ser gerados por script
O Shell do Windows fornece um conjunto poderoso de objetos de automação que permitem programar o Shell com o Microsoft Visual Basic e linguagens de script, como o Microsoft JScript (compatível com a especificação de linguagem ECMA 262) e o Microsoft Visual Basic Scripting Edition (VBScript). Você pode usar esses objetos para acessar muitos dos recursos e caixas de diálogo do Shell. Por exemplo, você pode acessar o sistema de arquivos, iniciar programas e alterar as configurações do sistema.
Esta seção apresenta os objetos Shell com script.
Versões do Shell
Muitos dos objetos Shell ficaram disponíveis na versão 4.71 do Shell. Outros estão disponíveis na versão 5.00 e posterior. A versão 5.00 ficou disponível com o Windows 2000. A tabela a seguir lista cada objeto Shell na versão do Shell na qual o objeto ficou disponível.
Instanciando objetos shell
Para instanciar os objetos Shell em aplicativos do Visual Basic com associação antecipada, adicione referências às seguintes bibliotecas em seu projeto:
- Controles de Internet da Microsoft (SHDocVw)
- Controles e automação do Microsoft Shell (Shell32)
Associação tardia
Você também pode instanciar muitos dos objetos Shell com associação tardia. Essa abordagem funciona em aplicativos do Visual Basic e no script. O exemplo a seguir mostra como instanciar o objeto Shell no JScript.
<SCRIPT LANGUAGE="JScript">
<!--
function fnCreateShell()
{
// Instantiate the Shell object and invoke its FileRun method.
var oShell = new ActiveXObject("shell.application");
oshell.FileRun;
}
-->
</SCRIPT>
O exemplo a seguir mostra como instanciar o objeto Folder no 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>
No exemplo anterior, sDir é o caminho para o objeto Folder . Observe que os valores de enumeração ShellSpecialFolderConstants não estão disponíveis no script.
O ProgID para cada um dos objetos Shell é mostrado na tabela a seguir.
Objeto | ProgID |
---|---|
DIDiskQuotaUser | Microsoft.DiskQuota.1 |
DiskQuotaControl | Não é possível associação tardia |
Pasta | Shell. Shell_Application.NameSpace("...") |
Folder2 | 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("..."). Auto.Verbos |
IShellDispatch2 | Shell. Shell_Application |
IShellLinkDual2 | Shell.NameSpace("..."). Self.GetLink ou Shell.NameSpace("..."). Itens(). GetLink |
Shell | Shell. Shell_Application |
ShellFolderItem | Shell.NameSpace("..."). Self ou Shell.NameSpace("..."). Itens() |
ShellFolderView | Não é possível associação tardia |
ShellFolderViewOC | Não é possível associação tardia |
ShellLinkObject | Shell.NameSpace("..."). Self.GetLink ou Shell.NameSpace("..."). Itens(). GetLink |
ShellUIHelper | Não é possível associação tardia |
ShellWindows | Shell. Shell_Windows ou ShellWindows._NewEnum |
WebViewFolderContents | Não é possível associação tardia |
Elemento HTML OBJECT
Você também pode usar o elemento OBJECT para instanciar objetos Shell em uma página HTML. Para fazer isso, defina o atributo ID do elemento OBJECT como o nome da variável que você usará em seus scripts e identifique o objeto usando seu número registrado (CLASSID). O HTML a seguir cria uma instância do objeto ShellFolderItem usando o elemento OBJECT .
<OBJECT ID="oShFolderItem"
NAME="Shell Folder Item Object"
CLASSID="clsid:2fe352ea-fd1f-11d2-b1f4-00c04f8eeb3e">
</OBJECT>
A tabela a seguir lista cada objeto Shell e seu respectivo CLASSID.
Objeto Shell | CLASSID |
---|---|
DIDiskQuotaUser | 7988B571-EC89-11cf-9C00-00AA00A14F56 |
DiskQuotaControl | 7988B571-EC89-11cf-9C00-00AA00A14F56 |
Pasta | 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 |
Objeto Shell
O objeto Shell representa os objetos no Shell. Você pode usar os métodos expostos pelo objeto Shell para:
- Abra, explore e procure pastas.
- Minimize, restaure, em cascata ou janelas abertas de bloco.
- Inicie Painel de Controle aplicativos.
- Exibir caixas de diálogo do sistema.
Talvez os usuários estejam mais familiarizados com os comandos que acessam no menu Iniciar e no menu de atalho da barra de tarefas. O menu de atalho da barra de tarefas é exibido quando os usuários clicam com o botão direito do mouse na barra de tarefas. O HTA (Aplicativo HTML) a seguir produz uma página inicial com botões que implementam muitos dos métodos do objeto Shell . Alguns desses métodos implementam recursos no menu Iniciar e no menu de atalho da barra de tarefas.
<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>
Segurança
Como um aplicativo, um HTA é executado em um modelo de segurança diferente de uma página da Web. Para interagir com uma página da Web que implementa a funcionalidade dos objetos Shell, os usuários devem habilitar a opção Inicializar e gerar scripts de Controles ActiveX não marcados como seguros para a zona de segurança na qual estão exibindo a página.
Objetos Folder
O objeto Folder representa uma pasta Shell. Você pode usar os métodos expostos pelo objeto Folder para:
- Obter informações sobre uma pasta.
- Criar subpastas.
- Copie e mova objetos de arquivo para a pasta .
O objeto FolderItem representa um item em uma pasta Shell. Suas propriedades permitem que você recupere informações sobre o item. Você pode usar os métodos expostos por esse objeto para executar os verbos de um item ou para recuperar informações sobre o objeto FolderItemVerbs de um item.
O objeto FolderItems representa uma coleção de itens em uma pasta Shell. Seus métodos e propriedades permitem que você recupere informações sobre a coleção.
O exemplo do Visual Basic a seguir mostra a relação entre vários dos objetos de pasta e como eles podem ser usados juntos. Quando o usuário clica no botão de comando chamado cmdGetPath, o programa exibe uma caixa de diálogo que permite ao usuário selecionar uma pasta em Meu Computador, em que ssfDRIVES é o valor de enumeração ShellSpecialFolderConstants para Meu Computador. Quando o usuário escolhe uma pasta, o caminho da pasta é exibido na caixa de texto chamada 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
No VBScript, essa função é ligeiramente diferente porque os valores de enumeração ShellSpecialFolderConstants não estão disponíveis no script. O exemplo a seguir mostra o equivalente de VBScript do exemplo 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>
No exemplo de JScript a seguir, que é uma tradução direta do exemplo anterior do VBScript, observe como os parênteses vazios '()' são usados para invocar os métodos Items e 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>