Uso dell'oggetto Desktop attivo
[Questa funzionalità è supportata solo in Windows XP o versioni precedenti. ]
Questo articolo contiene informazioni sull'oggetto ActiveDesktop che fa parte dell'API di Windows Shell. Questo oggetto, tramite la relativa interfaccia IActiveDesktop , consente di aggiungere, rimuovere e modificare gli elementi sul desktop.
Panoramica dell'interfaccia Desktop attivo
Active Desktop è una funzionalità introdotta con Microsoft Internet Explorer 4.0 che consente di includere documenti e elementi HTML (ad esempio Microsoft ActiveX Controls e Applets Java) direttamente sul desktop. L'interfaccia IActiveDesktop , che fa parte dell'API di Windows Shell, viene usata per aggiungere, rimuovere e modificare gli elementi nel desktop a livello di codice. È anche possibile aggiungere elementi desktop attivi usando un file CDF (Channel Definition Format).
Accesso a Desktop attivo
Per accedere a Active Desktop, un'applicazione client deve creare un'istanza dell'oggetto ActiveDesktop (CLSID_ActiveDesktop) con la funzione CoCreateInstance e recuperare un puntatore all'interfaccia IActiveDesktop dell'oggetto.
Nell'esempio seguente viene illustrato come recuperare un puntatore all'interfaccia IActiveDesktop .
HRESULT hr;
IActiveDesktop *pActiveDesktop;
//Create an instance of the Active Desktop
hr = CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER,
IID_IActiveDesktop, (void**)&pActiveDesktop);
//Insert code to call the IActiveDesktop methods
// Call the Release method
pActiveDesktop->Release();
Aggiunta di un elemento desktop
Esistono tre metodi che è possibile usare per aggiungere un elemento desktop: IActiveDesktop::AddDesktopItem, IActiveDesktop::AddDesktopItemWithUI e IActiveDesktop::AddUrl. Ogni elemento desktop aggiunto a Active Desktop deve avere un URL di origine diverso.
I metodi IActiveDesktop::AddDesktopItemWithUI e IActiveDesktop::AddUrl offrono entrambe l'opzione per visualizzare le varie interfacce utente che possono essere visualizzate prima di aggiungere un elemento desktop a Active Desktop. Le interfacce verificano se gli utenti vogliono aggiungere l'elemento desktop al proprio Desktop attivo. Le interfacce notificano anche agli utenti di eventuali rischi di sicurezza garantiti dalle impostazioni della zona di sicurezza URL e chiedono agli utenti se vogliono creare una sottoscrizione per questo elemento desktop. Entrambi i metodi offrono anche un modo per eliminare le interfacce utente. Il metodo IActiveDesktop::AddDesktopItem richiede una chiamata a IActiveDesktop::ApplyChanges per aggiornare il Registro di sistema. Per IActiveDesktop::AddDesktopItemWithUI, l'applicazione client deve rilasciare immediatamente l'interfaccia IActiveDesktop e quindi usare la funzione CoCreateInstance per recuperare un'interfaccia in un'istanza dell'oggetto ActiveDesktop che include l'elemento desktop appena aggiunto.
Il metodo IActiveDesktop::AddDesktopItem aggiunge l'elemento desktop specificato a Active Desktop senza alcuna interfaccia utente, a meno che le impostazioni dell'area di sicurezza URL non lo impediscono. Se le impostazioni dell'area di sicurezza URL non consentono l'aggiunta dell'elemento desktop senza richiedere all'utente, il metodo ha esito negativo. IActiveDesktop::AddDesktopItem richiede anche una chiamata a IActiveDesktop::ApplyChanges per aggiornare il Registro di sistema.
L'esempio seguente illustra come aggiungere un elemento desktop con il metodo IActiveDesktop::AddDesktopItem .
HRESULT hr;
IActiveDesktop *pActiveDesktop;
COMPONENT compDesktopItem;
//Create an instance of the Active Desktop
hr = CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER,
IID_IActiveDesktop, (void**)&pActiveDesktop);
// Initialize the COMPONENT structure
compDesktopItem.dwSize = sizeof(COMPONENT);
// Insert code that adds the information about the desktop item
// to the COMPONENT structure
// Add the desktop item
pActiveDesktop->AddDesktopItem(&compDesktopItem,0);
// Save the changes to the registry
pActiveDesktop->ApplyChanges(AD_APPLY_ALL);
Enumerazione degli elementi desktop
Per enumerare gli elementi desktop attualmente installati in Active Desktop, l'applicazione client deve recuperare il numero totale di elementi desktop installati usando il metodo IActiveDesktop::GetDesktopItemCount e quindi creando un ciclo che recupera la struttura COMPONENT per ogni elemento desktop chiamando il metodo IActiveDesktop::GetDesktopItem usando l'indice dell'elemento desktop.
L'esempio seguente illustra un modo per enumerare gli elementi desktop.
HRESULT hr;
IActiveDesktop *pActiveDesktop;
COMPONENT compDesktopItem;
int intCount;
int intIndex = 0;
//Create an instance of the Active Desktop
hr = CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER,
IID_IActiveDesktop, (void**)&pActiveDesktop);
pActiveDesktop->GetDesktopItemCount(&intCount,0);
compDesktopItem.dwSize = sizeof(COMPONENT);
while(intIndex<=(intCount-1))
{
//get the COMPONENT structure for the current desktop item
pActiveDesktop->GetDesktopItem(intIndex, &compDesktopItem,0);
//Insert code that processes the structure
//Increment the index
intIndex++;
//Insert code to clean-up structure for next component
}
// Call the Release method
pActiveDesktop->Release();