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


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

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

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

Общие сведения об интерфейсе Active Desktop

Active Desktop — это функция, представленная в Microsoft Internet Explorer 4.0, которая позволяет включать HTML-документы и элементы (например, элементы Microsoft ActiveX и приложения Java) непосредственно на рабочий стол. Интерфейс IActiveDesktop, который является частью API оболочки Windows, используется для программного добавления, удаления и изменения элементов на рабочем столе. Элементы Active Desktop также можно добавить с помощью файла формата определения канала (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 добавляет указанный элемент рабочего стола в Active Desktop без пользовательского интерфейса, если параметры зоны безопасности 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);

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

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