IConsoleNameSpace2
COM公式ドキュメント
IConsoleNameSpace2 インターフェイスは MMC 1.1 で導入されました。
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
IConsoleNameSpace2::Expand メソッドを使用すると、スナップインはスコープ ペインで項目を目に見える形で展開することなく、名前空間内の項目を展開できます。
| hItem | INT_PTR | in | 展開する項目へのハンドル。 |
戻り値
このメソッドは次のいずれかの値を返すことがあります。
解説(Remarks)
IConsoleNameSpace2::Expand は、指定した項目の子項目を列挙する目的でその項目を展開するために使用します。スコープ ペインに項目を子項目として挿入する前に、IConsoleNameSpace2::Expand を呼び出す必要があることに注意してください。
たとえば、スナップインが親項目の下の特定の位置(子項目リストの先頭など)に子項目を配置する必要がある場合、スナップインはこのメソッドを使用して項目を展開し、子項目を配置する正確な位置を見つけます。また、(以前の IConsoleNameSpace2::Expand の呼び出しや、スコープ ペインでユーザーがプラス記号をクリックすることによって)まだ展開されていない項目の子項目に対して IConsoleNameSpace2::GetChildItem を呼び出し、その子を列挙する目的でその項目を展開するために、このメソッドを使用することもできます。
IConsoleNameSpace2::Expand は、コンソールのスコープ ペインに表示されるツリー内の項目を目に見える形で展開することはありません。スコープ ペインで項目を目に見える形で展開または折りたたむには、スナップインは IConsole2::Expand を使用します。このメソッドは、その項目が以前に展開されていない場合に限り、MMCN_EXPAND 通知を IComponentData に送信します。
IConsoleNameSpace2::AddExtension メソッドを使用すると、スナップインは選択した項目の名前空間を動的に拡張する拡張スナップインを追加できます。
| hItem | INT_PTR | in | lpClsid で指定されたスナップインで拡張する項目へのハンドル。 |
| lpClsid | GUID* | in | hItem で指定された項目の名前空間を拡張するスナップインの CLSID へのポインター。 |
戻り値
このメソッドは次のいずれかの値を返すことがあります。
解説(Remarks)
スナップインが AddExtension メソッドを呼び出すと、lpClsid で指定された名前空間拡張は、hItem で指定された項目の特定のインスタンスのみを拡張します。その型の他の項目には影響しません。 AddExtension の呼び出しは、スナップイン マネージャーを使用してスナップインに拡張を追加することとは異なります。スナップイン マネージャーを使用してスナップインに拡張を追加した場合、その拡張はその型のスナップインのすべてのインスタンスに追加されます。
さらに、 AddExtension メソッドは、 AddExtension を呼び出すスナップインが直接所有する項目に対してのみ機能します。たとえば、スナップインが自身の名前空間に項目を追加する名前空間拡張を持っている場合、その項目はスナップインが所有していないため、スナップインは名前空間拡張によって提供される項目に対して AddExtension を呼び出すことはできません。
動的な名前空間拡張を追加する一般的な場所は、スナップインの IComponentData オブジェクトの MMCN_EXPAND 通知ハンドラー内です。
拡張スナップインが動的拡張としてのみ使用されることを意図している場合、スナップイン マネージャーの拡張ページで拡張可能なスナップインのボックスでプライマリ スナップインが選択されたときに、その拡張スナップインが利用可能な拡張のリスト ボックスに表示されないようにする必要があります。スナップイン マネージャーで拡張を非表示にするには、拡張したい項目のノード型を表すキーに "Dynamic Extensions" キーを追加します。次に、そのノード型を動的にのみ拡張するスナップインの CLSID を、新しいキーの下に値として配置します。
例
次のコード例は、CLSID_Extension で指定された拡張スナップインを追加します。
IConsoleNameSpace2* pExtensions = NULL;
HRESULT hr = m_pConsole->QueryInterface(IID_IConsoleNameSpace2, reinterpret_cast<void**>(&pExtensions));
if (SUCCEEDED(hr))
{
hr = pExtensions->AddExtension(m_pStaticRoot, const_cast<CLSID*>(&CLSID_Extension));
ASSERT(hr == S_OK);
pExtensions->Release();
}
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IConsoleNameSpace2 "{255F18CC-65DB-11D1-A7DC-00C04FD8D565}" #usecom global IConsoleNameSpace2 IID_IConsoleNameSpace2 "{}" #comfunc global IConsoleNameSpace2_Expand 10 sptr #comfunc global IConsoleNameSpace2_AddExtension 11 sptr,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IConsoleNameSpace2 "{255F18CC-65DB-11D1-A7DC-00C04FD8D565}" #usecom global IConsoleNameSpace2 IID_IConsoleNameSpace2 "{}" #comfunc global IConsoleNameSpace2_Expand 10 sptr #comfunc global IConsoleNameSpace2_AddExtension 11 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。