Condividi tramite


Utilizzo dell'oggetto Active Desktop

[Questa funzionalità è supportata solo in Windows XP o versioni precedenti. ]

Questo articolo contiene informazioni sull'oggetto ActiveDesktop che fa parte dell'API shell di Windows. Questo oggetto, tramite la relativa interfaccia IActiveDesktop, consente di aggiungere, rimuovere e modificare elementi sul desktop.

Panoramica dell'interfaccia Active Desktop

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 applet Java) direttamente sul desktop. L'interfaccia IActiveDesktop, che fa parte dell'API shell di Windows, viene usata per aggiungere, rimuovere e modificare gli elementi sul desktop a livello di codice. È anche possibile aggiungere elementi di Active Desktop usando un file CDF (Channel Definition Format).

Accesso a Active Desktop

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'interfacciadell'oggettoIActiveDesktop.

L'esempio seguente illustra come recuperare un puntatore all'interfacciaIActiveDesktop.

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

È possibile usare tre metodi per aggiungere un elemento desktop: IActiveDesktop::AddDesktopItem, IActiveDesktop::AddDesktopItemWithUIe IActiveDesktop::AddUrl. Ogni elemento desktop aggiunto a Active Desktop deve avere un URL di origine diverso.

I metodi IActiveDesktop::AddDesktopItemWithUI e IActiveDesktop::AddUrl offrono entrambi la possibilità di 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 inoltre agli utenti eventuali rischi per la sicurezza che sono giustificati dalle impostazioni dell'area di sicurezza URL e chiedono agli utenti se vogliono creare una sottoscrizione per questo elemento desktop. Entrambi i metodi forniscono 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 il 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 dell'URL non lo impediscano. Se le impostazioni dell'area di sicurezza URL non consentono l'aggiunta dell'elemento desktop senza chiedere conferma 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 strutturaCOMPONENT per ogni elemento desktop chiamando il metodo IActiveDesktop:: Metodo 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();