アクティブ デスクトップ オブジェクトの使用
[この機能は、Windows XP 以前でのみサポートされています。 ]
この記事には、Windows シェル API の一部である ActiveDesktop オブジェクトに関する情報が含まれています。 このオブジェクトは、 IActiveDesktop インターフェイスを介して、デスクトップ上の項目を追加、削除、および変更できます。
Active Desktop インターフェイスの概要
Active Desktop は、Microsoft Internet エクスプローラー 4.0 で導入された機能で、HTML ドキュメントとアイテム (Microsoft ActiveX Controls や Java アプレットなど) をデスクトップに直接含めることができます。 Windows シェル API の一部である IActiveDesktop インターフェイスは、デスクトップ上の項目をプログラムで追加、削除、変更するために使用されます。 アクティブなデスクトップ項目は、チャネル定義形式 (CDF) ファイルを使用して追加することもできます。
アクティブ デスクトップへのアクセス
Active Desktop にアクセスするには、クライアント アプリケーションで 、CoCreateInstance 関数を使用して ActiveDesktop オブジェクト (CLSID_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 の 3 種類です。 Active Desktop に追加される各デスクトップ項目には、異なるソース URL が必要です。
IActiveDesktop::AddDesktopItemWithUI メソッドと IActiveDesktop::AddUrl メソッドはどちらも、デスクトップ項目を Active Desktop に追加する前に表示できるさまざまなユーザー インターフェイスを表示するオプションを提供します。 インターフェイスは、ユーザーがデスクトップ項目を Active Desktop に追加するかどうかを確認します。 また、インターフェイスは、URL セキュリティ ゾーン設定によって保証されるセキュリティ リスクをユーザーに通知し、このデスクトップ アイテムのサブスクリプションを作成するかどうかをユーザーに尋ねます。 どちらの方法でも、ユーザー インターフェイスを抑制する方法が提供されます。 IActiveDesktop::AddDesktopItem メソッドでは、レジストリを更新するために IActiveDesktop::ApplyChanges を呼び出す必要があります。 IActiveDesktop::AddDesktopItemWithUI の場合、クライアント アプリケーションは IActiveDesktop インターフェイスを直ちに解放してから、CoCreateInstance 関数を使用して、新しく追加されたデスクトップ項目を含む ActiveDesktop オブジェクトのインスタンスへのインターフェイスを取得する必要があります。
IActiveDesktop::AddDesktopItem メソッドは、URL セキュリティ ゾーンの設定で禁止されていない限り、ユーザー インターフェイスなしで指定されたデスクトップ項目を Active Desktop に追加します。 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 構造を取得するループを作成する必要があります。
次の例では、デスクトップ項目を列挙する 1 つの方法を示します。
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();