Использование объекта 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();