Поделиться через


Использование объекта Active Desktop

[Эта функция поддерживается только в Windows XP или более ранних версиях. ]

Эта статья содержит сведения об объекте ActiveDesktop , который является частью API оболочки Windows. Этот объект с помощью интерфейса IActiveDesktop позволяет добавлять, удалять и изменять элементы на рабочем столе.

Общие сведения об интерфейсе Активного рабочего стола

Активный рабочий стол — это функция, представленная в Microsoft Internet Обозреватель 4.0, которая позволяет добавлять HTML-документы и элементы (например, элементы Microsoft ActiveX и java-приложения) непосредственно на рабочий стол. Интерфейс IActiveDesktop , который является частью API оболочки Windows, используется для программного добавления, удаления и изменения элементов на рабочем столе. Элементы активных рабочих столов также можно добавлять с помощью файла формата определения канала (CDF).

Доступ к активному рабочему столу

Чтобы получить доступ к Active Desktop, клиентскому приложению потребуется создать экземпляр объекта ActiveDesktop (CLSID_ActiveDesktop) с функцией CoCreateInstance и получить указатель на интерфейс IActiveDesktop объекта.

В следующем примере показано, как получить указатель на интерфейс 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();

Добавление элемента рабочего стола

Существует три способа добавления элемента рабочего стола: IActiveDesktop::AddDesktopItem, IActiveDesktop::AddDesktopItemWithUI и IActiveDesktop::AddUrl. Каждый элемент рабочего стола, добавленный в Active Desktop, должен иметь свой исходный URL-адрес.

Методы IActiveDesktop::AddDesktopItemWithUI и IActiveDesktop::AddUrl предоставляют возможность отображения различных пользовательских интерфейсов, которые можно отобразить перед добавлением элемента рабочего стола в Active Desktop. Интерфейсы проверяют, хотят ли пользователи добавить элемент рабочего стола в свой активный рабочий стол. Интерфейсы также уведомляют пользователей о любых рисках безопасности, которые гарантируются параметрами зоны безопасности URL-адресов, и спрашивают пользователей, хотят ли они создать подписку на этот элемент рабочего стола. Оба метода также предоставляют способ подавления пользовательских интерфейсов. Метод IActiveDesktop::AddDesktopItem требует вызова метода IActiveDesktop::ApplyChanges для обновления реестра. Для IActiveDesktop::AddDesktopItemWithUI клиентское приложение должно немедленно освободить интерфейс IActiveDesktop , а затем использовать функцию CoCreateInstance для получения интерфейса к экземпляру объекта ActiveDesktop , который включает добавленный элемент рабочего стола.

Метод IActiveDesktop::AddDesktopItem добавляет указанный элемент рабочего стола в Активный рабочий стол без пользовательского интерфейса, если только параметры зоны безопасности URL-адреса не препятствуют этому. Если параметры зоны безопасности URL-адреса не позволяют добавлять элемент рабочего стола без запроса пользователя, метод завершается ошибкой. IActiveDesktop::AddDesktopItem также требует вызова метода IActiveDesktop::ApplyChanges для обновления реестра.

В следующем примере показано, как добавить элемент рабочего стола с помощью метода 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);

Перечисление элементов рабочего стола

Чтобы перечислить элементы рабочего стола, установленные в данный момент на активном рабочем столе, клиентскому приложению необходимо получить общее количество элементов рабочего стола, установленных с помощью метода IActiveDesktop::GetDesktopItemCount , а затем создать цикл, который получает структуру COMPONENT для каждого элемента рабочего стола путем вызова метода IActiveDesktop::GetDesktopItem с помощью индекса элементов рабочего стола.

В следующем примере показан один из способов перечисления элементов рабочего стола.

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