使用活动桌面对象
[此功能仅在 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::AddDesktopItem、 IActiveDesktop::AddDesktopItemWithUI 和 IActiveDesktop::AddUrl。 添加到活动桌面的每个桌面项必须具有不同的源 URL。
IActiveDesktop::AddDesktopItemWithUI 和 IActiveDesktop::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();