次の方法で共有


シェル拡張機能を使用したアイコンとコンテキスト メニューの追加

注意

Windows Desktop Search 2.x は、Windows XP および Windows Server 2003 のアドインとしてもともと使用されていた古いテクノロジです。 以降のリリースでは、代わりに Windows Search を使用してください。

シェル拡張機能を実装することで、Microsoft Windows Desktop Search (WDS) とプロトコル ハンドラーを使用してユーザーのエクスペリエンスを向上させることができます。 追加の拡張機能がない場合、作成するプロトコル ハンドラーには、次のユーザー エクスペリエンスは含まれません。

  • WDS では、結果の特定のアイコンは表示されません。
  • ユーザーが項目をダブルクリックすると、ユーザー インターフェイスはイベントに応答しません。
  • ユーザーが項目を右クリックすると、コンテキスト メニューは項目の操作をサポートしません。

IShellFolder では、IPersistIPersistFolder の最小限の実装が必要です。IContextMenuIExtractIcon (よりシームレスなユーザー エクスペリエンスを提供する 2 つのインターフェイス) には、IShellFolder の最小限の実装が必要です。

 

IPersist

IPersist インターフェイスは、システムに永続的に格納できるオブジェクトの CLSID を提供するように設計された、単一のメソッド GetClassID を定義します。

メソッド 説明
GetClassID() プロトコル ハンドラーの ClassID を返します

 

注意

IPersist、IPersistFolderIShellFolder に対して同じ CLSID を実装する必要があります。

 

 

IPersistFolder

IPersistFolder インターフェイスは、シェル フォルダー オブジェクトを初期化するために使用されます。 IPersist から派生したこのインターフェイスの実装は、フォルダーがシェル名前空間内のどこにあるかを示す方法です。

メソッド 説明
Initialize() 渡された情報に基づいて自身を初期化するように Shell フォルダー オブジェクトに指示し、S_OKを返します。

 

注意

IPersist、IPersistFolderIShellFolder に対して同じ CLSID を実装する必要があります。

 

このインターフェイスは直接使用しません。 これは、シェル フォルダー オブジェクトを初期化するときに、IShellFolder::BindToObject インターフェイスのファイル システム実装によって使用されます。

 

IShellFolder

IShellFolder インターフェイスはフォルダーの管理に使用され、プロトコル ハンドラー用に実装されたアイコンとコンテキスト インターフェイスが Windows デスクトップ検索結果ユーザー インターフェイスで正しく動作するように、部分的な実装が必要です。 必要な機能のほとんどは 、GetUIObjectOf メソッドを使用して公開されます。 このメソッドを使用すると、アドインで IExtractIcon インターフェイスと IContextMenu インターフェイスに対してクエリを実行できます。

IShellFolder インターフェイスでは、URL の代わりに PIDL が使用されます。 完全な名前空間拡張機能の要件とは対照的に、アドインは URL のみを含む単純な IDL 構造体を使用できます。

IShellFolder の次のメソッドを実装する必要があります。 これらのメソッドのうち 5 つでは、最小限の実装が必要であることに注意してください。

メソッド 説明
BindToObject() E_NOTIMPLを返します
BindToStorage() E_NOTIMPLを返します
CreateViewObject() E_NOTIMPLを返します
SetNameOf() E_NOTIMPLを返します
ParseDisplayName() URL を PIDL 構造体に変換します
CompareIDs() 2 つの PIDL 値を比較します
GetDisplayNameOf() PIDL の URL を返します
GetUIObjectOf() このメソッドは、OLE COM QueryInterface メソッドに似ています。 アイコンが要求された場合、呼び出し元はIID_IExtractIconを要求します。コンテキスト メニューが要求された場合、呼び出し元はIID_IContextMenuを要求します。

 

注意

IPersist、IPersistFolderIShellFolder に対して同じ CLSID を実装する必要があります。

 

IShellFolder は、フォルダーの列挙には使用されません。 これは、フォルダーの表示名が物理 URL であることを意味します。 これは、今後変更される可能性があります。

 

IContextMenu

WDS がユーザーに結果を表示すると、ユーザーは項目を右クリックし、 IContextMenu インターフェイスによって定義されたコンテキスト メニューを表示できます。

コンテキスト メニューの既定のアクションは、項目がダブルクリックされたときに実行されるアクションと同じです。 項目に対応する IShellFolder インターフェイスまたは IContextMenu インターフェイスがない場合、ダブルクリック イベントの既定の動作では、URL を引数として ShellExecute 関数に渡します。

 

IExtractIcon

IExtractIcon は、プロトコル ハンドラーによって提供される PIDL の URL に基づいて、WDS ユーザー インターフェイスのアイコンを取得します。

 

コード サンプル

カスタム プロトコル ハンドラー のユーザー インターフェイス サンプル コードでは、IShellFolder とサポート インターフェイスの実装を示し、PIDL を操作するためのサポートが含まれています。

リファレンス

カスタム プロトコル ハンドラーのユーザー インターフェイスのサンプル コード

プロトコル ハンドラーのインストールと登録