Oggetti shell di cui è possibile creare script

Windows Shell offre un potente set di oggetti di automazione che consentono di programmare Shell con Microsoft Visual Basic e linguaggi di scripting, 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 nelle applicazioni Visual Basic con associazione anticipata, 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-00AAA00A14F56
DiskQuotaControl 7988B571-EC89-11cf-9C00-00AAA00A14F56
Cartella BBCBDE60-C3FF-11CE-8350-444553540000
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-44455354540000
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 nella shell. È possibile utilizzare i metodi esposti dall'oggetto Shell per:

  • Aprire, esplorare e cercare le cartelle.
  • Ridurre a icona, ripristinare, a catena o a riquadri aprire finestre.
  • Avviare applicazioni Pannello di controllo.
  • Visualizzare le finestre di dialogo di 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 fa 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 rispetto a una pagina Web. Per interagire con una pagina Web che implementa la funzionalità degli oggetti Shell, gli utenti devono abilitare i controlli ActiveX Inizializza e script non contrassegnati come sicuri per l'area di sicurezza in cui visualizzano la pagina.

Oggetti cartella

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

  • 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 relative proprietà consentono di recuperare informazioni sull'elemento. È possibile utilizzare i metodi esposti da questo oggetto per eseguire i verbi di un elemento o per recuperare informazioni sull'oggetto FolderItemVerbs di un elemento.

L'oggetto FolderItems rappresenta un insieme 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 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 My Computer. 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 JScript seguente, che è 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>