Freigeben über


Verwenden des Active Desktop-Objekts

[Dieses Feature wird nur unter Windows XP oder früher unterstützt. ]

Dieser Artikel enthält Informationen zum ActiveDesktop-Objekt , das Teil der Windows Shell-API ist. Mit diesem Objekt können Sie über die IActiveDesktop-Schnittstelle Elemente auf dem Desktop hinzufügen, entfernen und ändern.

Übersicht über die Active Desktop-Schnittstelle

Active Desktop ist ein Mit Microsoft Internet Explorer 4.0 eingeführtes Feature, mit dem Sie HTML-Dokumente und -Elemente (z. B. Microsoft ActiveX-Steuerelemente und Java-Applets) direkt auf Ihren Desktop einbinden können. Die IActiveDesktop-Schnittstelle , die Teil der Windows Shell-API ist, wird verwendet, um die Elemente auf dem Desktop programmgesteuert hinzuzufügen, zu entfernen und zu ändern. Active Desktop-Elemente können auch mithilfe einer CDF-Datei (Channel Definition Format) hinzugefügt werden.

Zugreifen auf den aktiven Desktop

Für den Zugriff auf Active Desktop muss eine Clientanwendung eine instance des ActiveDesktop-Objekts (CLSID_ActiveDesktop) mit der CoCreateInstance-Funktion erstellen und einen Zeiger auf die IActiveDesktop-Schnittstelle des Objekts abrufen.

Das folgende Beispiel zeigt, wie Sie einen Zeiger auf die IActiveDesktop-Schnittstelle abrufen.

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

Hinzufügen eines Desktopelements

Es gibt drei Methoden, mit denen Sie ein Desktopelement hinzufügen können: IActiveDesktop::AddDesktopItem, IActiveDesktop::AddDesktopItemWithUI und IActiveDesktop::AddUrl. Jedes Desktopelement, das dem Active Desktop hinzugefügt wird, muss eine andere Quell-URL aufweisen.

Die Methoden IActiveDesktop::AddDesktopItemWithUI und IActiveDesktop::AddUrl bieten die Möglichkeit, die verschiedenen Benutzeroberflächen anzuzeigen, die angezeigt werden können, bevor sie dem Active Desktop ein Desktopelement hinzufügen. Die Schnittstellen überprüfen, ob Benutzer das Desktopelement ihrem Active Desktop hinzufügen möchten. Die Schnittstellen benachrichtigen Benutzer auch über sicherheitsrelevante Risiken, die durch die Einstellungen für die URL-Sicherheitszone gerechtfertigt sind, und fragen Benutzer, ob sie ein Abonnement für dieses Desktopelement erstellen möchten. Beide Methoden bieten auch eine Möglichkeit, die Benutzeroberflächen zu unterdrücken. Die IActiveDesktop::AddDesktopItem-Methode erfordert einen Aufruf von IActiveDesktop::ApplyChanges , um die Registrierung zu aktualisieren. Für IActiveDesktop::AddDesktopItemWithUI muss die Clientanwendung sofort die IActiveDesktop-Schnittstelle freigeben und dann die CoCreateInstance-Funktion verwenden, um eine Schnittstelle für eine instance des ActiveDesktop-Objekts abzurufen, das das neu hinzugefügte Desktopelement enthält.

Die IActiveDesktop::AddDesktopItem-Methode fügt das angegebene Desktopelement dem Active Desktop ohne Benutzeroberfläche hinzu, es sei denn, die Einstellungen der URL-Sicherheitszone verhindern dies. Wenn die Einstellungen der URL-Sicherheitszone nicht zulassen, dass das Desktopelement hinzugefügt werden kann, ohne dass der Benutzer dazu aufgefordert wird, schlägt die Methode fehl. IActiveDesktop::AddDesktopItem erfordert auch einen Aufruf von IActiveDesktop::ApplyChanges , um die Registrierung zu aktualisieren.

Im folgenden Beispiel wird das Hinzufügen eines Desktopelements mit der IActiveDesktop::AddDesktopItem-Methode veranschaulicht.

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

Auflisten der Desktopelemente

Um die derzeit auf dem Active Desktop installierten Desktopelemente aufzulisten, muss die Clientanwendung die Gesamtanzahl der mit der IActiveDesktop::GetDesktopItemCount-Methode installierten Desktopelemente abrufen und dann eine Schleife erstellen, die die COMPONENT-Struktur für jedes Desktopelement abruft, indem die IActiveDesktop::GetDesktopItem-Methode mithilfe des Desktopelementindexes aufgerufen wird.

Das folgende Beispiel veranschaulicht eine Möglichkeit, die Desktopelemente aufzulisten.

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