Oggetti shell di cui è possibile creare script

Shell Windows offre un potente set di oggetti di automazione che consentono di programmare Shell con linguaggi di scripting e Visual Basic Microsoft, ad esempio Microsoft JScript (compatibile con la specifica del linguaggio ECMA 262) e Microsoft Visual Basic Scripting Edition (VBScript). È possibile usare questi oggetti per accedere a molte delle funzionalità e delle finestre di dialogo della shell. Ad esempio, è possibile accedere al file system, avviare programmi e modificare le impostazioni di sistema.

In questa sezione vengono presentati gli oggetti shell di cui è possibile creare script.

Versioni della shell

Molti degli oggetti Shell sono diventati disponibili nella versione 4.71 della shell. Altre sono disponibili nella versione 5.00 e successive. La versione 5.00 è diventata disponibile con Windows 2000. Nella tabella seguente sono elencati ogni oggetto Shell nella versione di Shell in cui l'oggetto è diventato disponibile.

Versione 4.71 Versione 5.00
Cartella DIDiskQuotaUser
FolderItemVerb DiskQuotaControl
FolderItemVerbs Cartella2
Shell FolderItem
ShellFolderView FolderItems
ShellUIHelper FolderItems2
ShellWindows IShellDispatch2
WebViewFolderContents IShellLinkDual2
ShellFolderItem
ShellFolderViewOC
ShellLinkObject

 

Creazione di istanze di oggetti shell

Per creare un'istanza degli oggetti Shell in Visual Basic applicazioni con binding anticipato, aggiungere riferimenti alle librerie seguenti nel progetto:

  • Controlli Microsoft Internet (SHDocVw)
  • Controlli e automazione di Microsoft Shell (Shell32)

Associazione tardiva

È anche possibile creare un'istanza di molti degli oggetti Shell con associazione tardiva. Questo approccio funziona nelle applicazioni Visual Basic e nello script. Nell'esempio seguente viene illustrato come creare un'istanza dell'oggetto Shell in JScript.

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

Nell'esempio seguente viene illustrato come creare un'istanza dell'oggetto Folder in 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>

Nell'esempio precedente , sDir è il percorso dell'oggetto Folder . Si noti che i valori di enumerazione ShellSpecialFolderConstants non sono disponibili nello script.

Il ProgID per ogni oggetto Shell è illustrato nella tabella seguente.

Oggetto ProgID
DIDiskQuotaUser Microsoft.DiskQuota.1
DiskQuotaControl Impossibile eseguire l'associazione tardiva
Cartella Guscio. Shell_Application.NameSpace("...")
Cartella2 Guscio. Shell_Application.NameSpace("...")
FolderItem Guscio. 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 Guscio. Shell_Application
IShellLinkDual2 Shell.NameSpace("..."). Self.GetLink o Shell.NameSpace("..."). Items(). GetLink
Shell Guscio. Shell_Application
ShellFolderItem Shell.NameSpace("..."). Self o Shell.NameSpace("..."). Items()
ShellFolderView Impossibile eseguire l'associazione tardiva
ShellFolderViewOC Impossibile eseguire l'associazione tardiva
ShellLinkObject Shell.NameSpace("..."). Self.GetLink o Shell.NameSpace("..."). Items(). GetLink
ShellUIHelper Impossibile eseguire l'associazione tardiva
ShellWindows Guscio. Shell_Windows o ShellWindows._NewEnum
WebViewFolderContents Impossibile eseguire l'associazione tardiva

 

Elemento OBJECT HTML

È anche possibile utilizzare l'elemento OBJECT per creare un'istanza di oggetti Shell in una pagina HTML. A tale scopo, impostare l'attributo ID dell'elemento OBJECT sul nome della variabile che verrà usato negli script e identificare l'oggetto usando il relativo numero registrato (CLASSID). Il codice HTML seguente crea un'istanza dell'oggetto ShellFolderItem utilizzando l'elemento OBJECT .

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

Nella tabella seguente sono elencati ogni oggetto Shell e il rispettivo CLASSID.

Oggetto Shell CLASSID
DIDiskQuotaUser 7988B571-EC89-11cf-9C00-00AA00A14F56
DiskQuotaControl 7988B571-EC89-11cf-9C00-00AA00A14F56
Cartella BBCBDE60-C3FF-11CE-8350-44455354000
Cartella2 f0d2d8ef-3890-11d2-bf8b-00c04fb93661
FolderItem 744129E0-CBE5-11CE-8350-44455353540000
FolderItems 744129E0-CBE5-11CE-8350-44455353540000
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-44455353540000
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

 

Oggetto Shell

L'oggetto Shell rappresenta gli oggetti in Shell. È possibile usare i metodi esposti dall'oggetto Shell a:

  • Aprire, esplorare e cercare cartelle.
  • Ridurre al minimo, ripristinare, a catena o a riquadri aprire finestre.
  • Avviare applicazioni Pannello di controllo.
  • Visualizza le finestre di dialogo del sistema.

Gli utenti hanno probabilmente familiarità con i comandi a cui accedono dal menu Start e dal menu di scelta rapida della barra delle applicazioni. Il menu di scelta rapida della barra delle applicazioni viene visualizzato quando gli utenti fare clic con il pulsante destro del mouse sulla barra delle applicazioni. L'applicazione HTML seguente (HTA) produce una pagina iniziale con pulsanti che implementano molti dei metodi dell'oggetto Shell . Alcuni di questi metodi implementano funzionalità nel menu Start e nel menu di scelta rapida della barra delle applicazioni.

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

Sicurezza

Come applicazione, un HTA viene eseguito con un modello di sicurezza diverso da una pagina Web. Per interagire con una pagina Web che implementa le funzionalità degli oggetti Shell, gli utenti devono abilitare l'opzione Inizializza e script ActiveX Controlli non contrassegnati come sicuri per la zona di sicurezza in cui visualizzano la pagina.

Oggetti cartella

L'oggetto Folder rappresenta una cartella Shell. È possibile usare i metodi esposti dall'oggetto Folder a:

  • Ottenere informazioni su una cartella.
  • Creare sottocartelle.
  • Copiare e spostare oggetti file nella cartella.

L'oggetto FolderItem rappresenta un elemento in una cartella shell. Le proprietà consentono di recuperare informazioni sull'elemento. È possibile usare i metodi esposti da questo oggetto per eseguire i verbi di un elemento o recuperare informazioni sull'oggetto FolderItemVerbs di un elemento.

L'oggetto FolderItems rappresenta una raccolta di elementi in una cartella shell. I metodi e le proprietà consentono di recuperare informazioni sulla raccolta.

Nell'esempio di Visual Basic seguente viene illustrata la relazione tra diversi oggetti della cartella e come possono essere usati insieme. Quando l'utente fa clic sul pulsante di comando denominato cmdGetPath, il programma visualizza una finestra di dialogo che consente all'utente di selezionare una cartella da My Computer, dove ssfDRIVES è il valore di enumerazione ShellSpecialFolderConstants per Il computer personale. Quando l'utente sceglie una cartella, il percorso della cartella viene visualizzato nella casella di testo denominata 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 questa funzione è leggermente diversa perché i valori di enumerazione ShellSpecialFolderConstants non sono disponibili nello script. Nell'esempio seguente viene illustrato l'equivalente VBScript dell'esempio precedente.

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

Nell'esempio di JScript seguente, ovvero una traduzione diretta dell'esempio VBScript precedente, si noti come le parentesi vuote '()' vengono usate per richiamare i metodi 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>