使用活动桌面对象

[此功能仅在 Windows XP 或更早版本中受支持。 ]

本文包含有关属于 Windows Shell API 的 ActiveDesktop 对象的信息。 此对象通过其 IActiveDesktop 接口,使你能够在桌面上添加、删除和更改项。

活动桌面界面概述

Active Desktop 是 Microsoft Internet Explorer 4.0 中引入的一项功能,使你可以将 HTML 文档和项目 ((如 Microsoft ActiveX 控件和 Java 小程序)直接) 到桌面。 IActiveDesktop 接口是 Windows Shell API 的一部分,用于以编程方式添加、删除和修改桌面上的项。 还可以使用通道定义格式 (CDF) 文件添加活动桌面项。

访问活动桌面

若要访问 Active Desktop,客户端应用程序需要使用 CoCreateInstance 函数 (CLSID_ActiveDesktop) 创建 ActiveDesktop 对象的实例,并检索指向对象的 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::AddDesktopItemIActiveDesktop::AddDesktopItemWithUIIActiveDesktop::AddUrl。 添加到活动桌面的每个桌面项必须具有不同的源 URL。

IActiveDesktop::AddDesktopItemWithUIIActiveDesktop::AddUrl 方法都提供了显示可在将桌面项添加到 Active Desktop 之前显示的各种用户界面的选项。 接口验证用户是否要将桌面项添加到其 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);

枚举桌面项

若要枚举当前安装在 Active Desktop 上的桌面项,客户端应用程序需要检索使用 IActiveDesktop::GetDesktopItemCount 方法安装的桌面项总数,然后使用桌面项索引调用 IActiveDesktop::GetDesktopItem 方法,创建检索每个桌面项的 COMPONENT 结构的循环。

以下示例演示枚举桌面项的一种方法。

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