Utilisation de l’objet Active Desktop

[cette fonctionnalité est prise en charge uniquement sous Windows XP ou version antérieure. ]

cet article contient des informations sur l’objet ActiveDesktop qui fait partie de l’API Windows Shell. Cet objet, via son interface IActiveDesktop , vous permet d’ajouter, de supprimer et de modifier des éléments sur le bureau.

Vue d’ensemble de l’interface Active Desktop

Active Desktop est une fonctionnalité introduite dans Microsoft Internet Explorer 4,0 qui vous permet d’inclure des documents et des éléments HTML (tels que des contrôles Microsoft ActiveX et des applets Java) directement sur votre bureau. l’interface IActiveDesktop , qui fait partie de l’API Windows Shell, est utilisée pour ajouter, supprimer et modifier des éléments sur le bureau par programmation. Vous pouvez également ajouter des éléments Active Desktop à l’aide d’un fichier CDF (Channel Definition Format).

Accès à Active Desktop

Pour accéder à Active Desktop, une application cliente doit créer une instance de l’objet ActiveDesktop (CLSID _ ActiveDesktop) avec la fonction CoCreateInstance et récupérer un pointeur vers l’interface IActiveDesktop de l’objet.

L’exemple suivant montre comment récupérer un pointeur vers l’interface 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();

Ajout d’un élément de bureau

Il existe trois méthodes que vous pouvez utiliser pour ajouter un élément de bureau : IActiveDesktop :: AddDesktopItem, IActiveDesktop :: AddDesktopItemWithUIet IActiveDesktop :: AddUrl. Chaque élément de bureau ajouté à Active Desktop doit avoir une URL source différente.

Les méthodes IActiveDesktop :: AddDesktopItemWithUI et IActiveDesktop :: AddUrl fournissent toutes les deux la possibilité d’afficher les différentes interfaces utilisateur qui peuvent être affichées avant l’ajout d’un élément de bureau à Active Desktop. Les interfaces vérifient si les utilisateurs souhaitent ajouter l’élément de bureau à leur bureau actif. Les interfaces informent également les utilisateurs de tous les risques de sécurité qui sont garantis par les paramètres de la zone de sécurité URL et demandent aux utilisateurs s’ils souhaitent créer un abonnement pour cet élément de bureau. Les deux méthodes fournissent également un moyen de supprimer les interfaces utilisateur. La méthode IActiveDesktop :: AddDesktopItem requiert un appel à IActiveDesktop :: ApplyChanges afin de mettre à jour le registre. Pour IActiveDesktop :: AddDesktopItemWithUI, l’application cliente doit immédiatement libérer l' interface IActiveDesktop , puis utiliser la fonction CoCreateInstance pour récupérer une interface vers une instance de l’objet ActiveDesktop qui comprend l’élément Desktop nouvellement ajouté.

La méthode IActiveDesktop :: AddDesktopItem ajoute l’élément de bureau spécifié au bureau actif sans interface utilisateur, sauf si les paramètres de la zone de sécurité de l’URL l’empêchent. Si les paramètres de la zone de sécurité URL n’autorisent pas l’ajout de l’élément de bureau sans inviter l’utilisateur, la méthode échoue. IActiveDesktop :: AddDesktopItem nécessite également un appel à IActiveDesktop :: ApplyChanges pour mettre à jour le registre.

L’exemple suivant montre comment ajouter un élément de bureau avec la méthode 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);

Énumération des éléments du Bureau

Pour énumérer les éléments du Bureau actuellement installés sur le bureau actif, l’application cliente doit récupérer le nombre total d’éléments de bureau installés à l’aide de la méthode IActiveDesktop :: GetDesktopItemCount , puis créer une boucle qui récupère la structure du composant pour chaque élément du Bureau en appelant la méthode IActiveDesktop :: GetDesktopItem à l’aide de l’index de l’élément de bureau.

L’exemple suivant illustre une façon d’énumérer les éléments du bureau.

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();