IExplorerHost, IExplorerHost2
ファイルの関連付けでコマンドの代わりに実行されます。
確認済み OS
Windows 7
構文
[C/C++]
DECLARE_INTERFACE_IID_(IExplorerHost, IUnknown, "489E9453-869B-4BCC-A1C7-48B5285FD9D8") { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid LPVOID FAR* ppvObject) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /*** IExplorerHost method ***/ STDMETHOD(ShowWindow)(THIS_ PCIDLIST_ABSOLUTE pidlItem, int unknown, int xCurrent, int yCurrent, int nCmdShow) PURE; }; DECLARE_INTERFACE_IID_(IExplorerHost2, IExplorerHost, "50A87BAA-5F79-4C31-B6B3-28F6F2D097E6") { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid LPVOID FAR* ppvObject) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /*** IExplorerHost method ***/ STDMETHOD(ShowWindow)(THIS_ PCIDLIST_ABSOLUTE pidlItem, int unknown, int xCurrent, int yCurrent, int nCmdShow) PURE; /*** IExplorerHost2 method ***/ STDMETHOD(ShowWindowAtRect)(THIS_ PCIDLIST_ABSOLUTE pidlItem, int unknown, const RECT FAR* lprcRect, int nCmdShow) PURE; }; EXTERN_C const IID IID_IExplorerHost = { 0x489E9453, 0x869B, 0x4BCC, 0xA1, 0xC7, 0x48, 0xB5, 0x28, 0x5F, 0xD9, 0xD8 }; EXTERN_C const IID IID_IExplorerHost2 = { 0x50A87BAA, 0x5F79, 0x4C31, 0xB6, 0xB3, 0x28, 0xF6, 0xF2, 0xD0, 0x97, 0xE6 };
[VB]
(準備中)
[VB.NET]
(準備中)
メソッド
ShowWindow
pidlItemに基づき新しくウィンドウを作成して表示します。
pidlItem | 項目のITEMIDLIST(デスクトップからの絶対パス)を指定します。 |
---|---|
unknown | (不明、0が指定できます) |
xCurrent, yCurrent | 現在アクティブな位置の座標(マウスカーソルなど)をスクリーン座標で指定し、ウィンドウを表示させるためのモニター領域を決定するのに利用します。この値がそのままMonitorFromPoint関数に渡されます(MONITOR_DEFAULTTONEARESTを利用)。 |
nCmdShow | ウィンドウを表示する際の表示パラメーター(SW_SHOWNORMALなど)を指定します。 |
ShowWindowAtRect
pidlItemに基づき新しくウィンドウを作成して表示します。ウィンドウはlprcRectの領域に合わせて表示されます。
pidlItem | 項目のITEMIDLIST(デスクトップからの絶対パス)を指定します。 |
---|---|
unknown | (不明、0が指定できます) |
lprcRect | ウィンドウを表示させる領域を指定します。なお、この構造体のleftとtopの値はMonitorFromPoint関数にも渡されます(MONITOR_DEFAULTTONEARESTを利用)。 |
nCmdShow | ウィンドウを表示する際の表示パラメーター(SW_SHOWNORMALなど)を指定します。 |
戻り値
いずれもHRESULTの値が返ります。成功した場合別スレッドで実際のアクションが実行される場合がほとんどであるため、その間メッセージループなどを回す必要があります(通常のアプリケーション用メッセージループで可)。また、その際インターフェイスはReleaseしても構いません。
解説
ファイル関連付けの「ExplorerHost」にこのインターフェイスを実装したクラスのCLSIDを指定するとこれらのインターフェイスを経由してメソッドが呼び出されます。
このインターフェイスを実装しているクラス例
クラス名 | CLSID |
---|---|
CLSID_CommonExplorerHost | {93A56381-E0CD-485A-B60E-67819E12F81B} |
CLSID_SeparateSingleProcessExplorerHost | {CEFF45EE-C862-41DE-AEE2-A022C81EDA92} |
CLSID_SeparateMultipleProcessExplorerHost | {75DFF2B7-6936-4C06-A8BB-676A7B00B24B} |
最終更新日: 2012/01/23