Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Esplora risorse di Windows è un potente applicativo per l'esplorazione e la gestione delle risorse. È possibile accedere a Esplora risorse come un insieme integrato tramite Explorer.exe o l'interfaccia IExplorerBrowser. Esplora risorse (Explorer.exe) può essere generato come processo separato usando ShellExecuteEx o una funzione simile.
È possibile individuare e programmare le finestre di Esplora risorse usando IShellWindows (CLSID_ShellWindows) e è possibile creare nuove istanze di Esplora risorse usando IWebBrowser2 (CLSID_ShellBrowserWindow).
L'esempio di codice seguente illustra come usare il modello di automazione di Esplora risorse per creare e individuare le finestre di esplorazione in esecuzione.
#define _WIN32_WINNT 0x0600
#define _WIN32_IE 0x0700
#define _UNICODE
#include <windows.h>
#include <shobjidl.h>
#include <shlobj.h>
#include <shlwapi.h>
#include <strsafe.h>
#include <propvarutil.h>
#pragma comment(lib, "shlwapi.lib")
#pragma comment(lib, "ole32.lib")
#pragma comment(lib, "shell32.lib")
#pragma comment(lib, "propsys.lib")
// Use the Shell Windows object to find all of the explorer and IExplorer
// windows and close them.
void CloseExplorerWindows()
{
IShellWindows* psw;
if (SUCCEEDED(CoCreateInstance(CLSID_ShellWindows,
NULL,
CLSCTX_LOCAL_SERVER,
IID_PPV_ARGS(&psw))))
{
VARIANT v = { VT_I4 };
if (SUCCEEDED(psw->get_Count(&v.lVal)))
{
// Walk backward to make sure that the windows that close
// do not cause the array to be reordered.
while (--v.lVal >= 0)
{
IDispatch *pdisp;
if (S_OK == psw->Item(v, &pdisp))
{
IWebBrowser2 *pwb;
if (SUCCEEDED(pdisp->QueryInterface(IID_PPV_ARGS(&pwb))))
{
pwb->Quit();
pwb->Release();
}
pdisp->Release();
}
}
}
psw->Release();
}
}
// Convert an IShellItem or IDataObject into a VARIANT that holds an IDList
// suitable for use with IWebBrowser2::Navigate2.
HRESULT InitVariantFromObject(IUnknown *punk, VARIANT *pvar)
{
VariantInit(pvar);
PIDLIST_ABSOLUTE pidl;
HRESULT hr = SHGetIDListFromObject(punk, &pidl);
if (SUCCEEDED(hr))
{
hr = InitVariantFromBuffer(pidl, ILGetSize(pidl), pvar);
CoTaskMemFree(pidl);
}
return hr;
}
HRESULT ParseItemAsVariant(PCWSTR pszItem, IBindCtx *pbc, VARIANT *pvar)
{
VariantInit(pvar);
IShellItem *psi;
HRESULT hr = SHCreateItemFromParsingName(pszItem, NULL, IID_PPV_ARGS(&psi));
if (SUCCEEDED(hr))
{
hr = InitVariantFromObject(psi, pvar);
psi->Release();
}
return hr;
}
HRESULT GetKnownFolderAsVariant(REFKNOWNFOLDERID kfid, VARIANT *pvar)
{
VariantInit(pvar);
PIDLIST_ABSOLUTE pidl;
HRESULT hr = SHGetKnownFolderIDList(kfid, 0, NULL, &pidl);
if (SUCCEEDED(hr))
{
hr = InitVariantFromBuffer(pidl, ILGetSize(pidl), pvar);
CoTaskMemFree(pidl);
}
return hr;
}
HRESULT GetShellItemFromCommandLine(REFIID riid, void **ppv)
{
*ppv = NULL;
HRESULT hr = E_FAIL;
int cArgs;
PWSTR *ppszCmd = CommandLineToArgvW(GetCommandLineW(), &cArgs);
if (ppszCmd && cArgs > 1)
{
WCHAR szSpec[MAX_PATH];
StringCchCopyW(szSpec, ARRAYSIZE(szSpec), ppszCmd[1]);
PathUnquoteSpacesW(szSpec);
hr = szSpec[0] ? S_OK : E_FAIL; // Protect against empty data
if (SUCCEEDED(hr))
{
hr = SHCreateItemFromParsingName(szSpec, NULL, riid, ppv);
if (FAILED(hr))
{
WCHAR szFolder[MAX_PATH];
GetCurrentDirectoryW(ARRAYSIZE(szFolder), szFolder);
hr = PathAppendW(szFolder, szSpec) ? S_OK : E_FAIL;
if (SUCCEEDED(hr))
{
hr = SHCreateItemFromParsingName(szFolder, NULL, riid, ppv);
}
}
}
}
return hr;
}
HRESULT GetShellItemFromCommandLineAsVariant(VARIANT *pvar)
{
VariantInit(pvar);
IShellItem *psi;
HRESULT hr = GetShellItemFromCommandLine(IID_PPV_ARGS(&psi));
if (SUCCEEDED(hr))
{
hr = InitVariantFromObject(psi, pvar);
psi->Release();
}
return hr;
}
void OpenWindow()
{
IWebBrowser2 *pwb;
HRESULT hr = CoCreateInstance(CLSID_ShellBrowserWindow,
NULL,
CLSCTX_LOCAL_SERVER,
IID_PPV_ARGS(&pwb));
if (SUCCEEDED(hr))
{
CoAllowSetForegroundWindow(pwb, 0);
pwb->put_Left(100);
pwb->put_Top(100);
pwb->put_Height(600);
pwb->put_Width(800);
VARIANT varTarget = {0};
hr = GetShellItemFromCommandLineAsVariant(&varTarget);
if (FAILED(hr))
{
hr = GetKnownFolderAsVariant(FOLDERID_UsersFiles, &varTarget);
}
if (SUCCEEDED(hr))
{
VARIANT vEmpty = {0};
hr = pwb->Navigate2(&varTarget, &vEmpty, &vEmpty, &vEmpty, &vEmpty);
if (SUCCEEDED(hr))
{
pwb->put_Visible(VARIANT_TRUE);
}
VariantClear(&varTarget);
}
pwb->Release();
}
}
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
if (SUCCEEDED(hr))
{
CloseExplorerWindows();
OpenWindow();
CoUninitialize();
}
return 0;
}
L'area client di Esplora risorse può essere ospitata usando l'interfaccia IExplorerBrowser. Il client di Esplora Risorse di Windows e i controlli della struttura ad albero dello spazio dei nomi sono componenti standard di Windows Vista e versioni successive. Gli sviluppatori possono riutilizzare le interfacce come componenti di compilazione. Un uso comune di questi controlli consiste nel creare esploratori personalizzati adatti al dominio del problema.
I controlli in Esplora risorse sono classificati nelle categorie funzionali seguenti:
- Controlli di Navigazione
- controlli dei comandi
- i controlli di proprietà e anteprima
- filtri e controlli di visualizzazione
- Controllo ListView
Controlli di navigazione
I controlli di spostamento aiutano gli utenti a determinare il contesto e a spostarsi nello spazio di dominio logico associato, denominato spazio di pagina. Ad esempio, lo spazio di pagina per Esplora File è lo spazio dei nomi shell. Gli spazi di pagina sono costituiti da zero o più pagine.
La tabella seguente elenca e descrive i controlli di spostamento disponibili in Esplora risorse in Windows Vista e nei sistemi operativi successivi.
Controllo di navigazione | Descrizione |
---|---|
Barra degli indirizzi (controllo Breadcrumb) | Visualizza l'indirizzo della pagina corrente nello spazio di pagina. Puoi cliccare sui pulsanti delle briciole di pane per navigare verso qualsiasi pagina nello spazio delle pagine. Gli utenti possono anche digitare URL e percorsi da esplorare. |
Albero delle cartelle | Fornisce una nuova versione di un controllo albero, ottimizzata per spazi di paging di grandi dimensioni. |
Viaggio | Abilita lo spostamento relativo tramite pulsanti in stile Web, ad esempio Indietro e Avanti. |
Titolo | Visualizza il nome e il contesto correnti di Explorer. |
Spazio di pagina | Visualizza il ramo corrente dello spazio delle pagine. Le pagine possono essere ordinate in base a criteri diversi. Gli utenti possono cliccare su una pagina per navigarvi. |
Controlli dei comandi
I controlli dei comandi pubblicizzano agli utenti le caratteristiche e le funzionalità di Esplora Risorse. Questi controlli eseguono azioni o azioni generali specifiche di un elemento o di un elemento selezionato.
Controllo dei comandi | Descrizione |
---|---|
Barra degli strumenti | Visualizza i pulsanti per i comandi di uso comune (una nuova versione di una barra degli strumenti dei comandi). Le opzioni di personalizzazione includono pulsanti a discesa, pulsanti suddivisi, testo descrittivo facoltativo e un'area eccedente. |
Eroe | Viene visualizzato come un singolo controllo personalizzato facoltativo al centro della barra degli strumenti. Rappresenta il comando primario per il contesto corrente. |
Barra dei menu | Presenta i comandi tramite i menu. |
Menu di scelta rapida | Elenca un sottoinsieme contestuale di comandi disponibili che vengono visualizzati in seguito al clic con il pulsante destro del mouse su un elemento. |
Controlli delle proprietà e dell'anteprima
I controlli proprietà e anteprima vengono usati per visualizzare in anteprima gli elementi e per visualizzare e modificare le proprietà degli elementi.
Controllo | Descrizione |
---|---|
Anteprima | Visualizza un'anteprima dell'elemento selezionato, ad esempio un'anteprima o un'icona dinamica. |
Proprietà | Visualizza le proprietà dell'elemento selezionato. Per più selezioni, viene visualizzato un riepilogo delle proprietà per il gruppo selezionato di elementi. Per una selezione Null, viene visualizzato un riepilogo delle proprietà per la pagina corrente (contenuto della visualizzazione elenco). |
Filtri e controlli di visualizzazione
I controlli di filtro e visualizzazione vengono usati per modificare il set di elementi nella visualizzazione elenco e per modificare la presentazione degli elementi nella visualizzazione elenco.
Controllo | Descrizione |
---|---|
Filtro | Filtra o dispone gli elementi in una visualizzazione elenco in base alle proprietà elencate come colonne. Facendo clic su una colonna viene ordinato in base a tale proprietà. |
Wordwheel | Filtra in modo dinamico e incrementale gli elementi visualizzati in una visualizzazione elenco in base a una stringa di testo di input. |
Visualizza | Consente all'utente di modificare la modalità di visualizzazione di un controllo listview. È possibile usare un dispositivo di scorrimento per determinare le dimensioni dell'icona. |
Controllo Listview
Il controllo listview viene usato per visualizzare un set di elementi in una delle quattro modalità di visualizzazione: dettagli, riquadri, icone o panorama. Il controllo listview consente inoltre all'utente di selezionare e attivare uno o più elementi.
Cautela
Sebbene alcuni di questi controlli abbiano nomi e/o funzionalità simili ai controlli Windows Presentation Foundation (WPF) standard presenti nello spazio dei nomi System.Windows.Controls, sono classi distinte.
Questi controlli separati interagiscono in gran parte tramite eventi generati dall'interazione dell'utente o dai controlli stessi. La tabella seguente illustra le tre categorie di eventi principali.
Categoria di eventi | Esempio |
---|---|
Navigazione | Passando da una pagina a un'altra. |
Selezione | Modifica della selezione corrente nella visualizzazione elenco. |
Visualizza modifica | Modifica dell'ordine di presentazione o della modalità di visualizzazione nella visualizzazione elenco. |