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