IShellWindows
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
開いている Shell ウィンドウのコレクションへのアクセスを提供します。
解説(Remarks)
Shell ウィンドウ とは、IShellWindows::Register または IShellWindows::RegisterPending を呼び出して登録されたウィンドウのことです。登録すると、指定したウィンドウが Shell ウィンドウのコレクションに追加され、コレクション内でそのウィンドウを一意に識別する cookie が付与されます。ウィンドウは IShellWindows::Revoke を呼び出すことで登録解除できます。
Shell ウィンドウのコレクションには、ファイル エクスプローラーのウィンドウと Web ブラウザーのウィンドウ(Internet Explorer およびサードパーティ製の Web ブラウザー)が含まれます。通常、各 Shell ウィンドウは IDispatch を実装しています。IShellWindows::Item および IShellWindows::FindWindowSW は、Shell ウィンドウの IDispatch インターフェイスにアクセスする手段を提供します。詳細については、Dispatch Interface and Automation Functions を参照してください。
| IID | IID_IShellWindows (85CB6900-4D95-11CF-960C-0080C7F4EE85) |
|---|---|
| CLSID | CLSID_ShellWindows (9BA05972-F6A8-11CF-A442-00A0C90A8F39) |
次の例は、IShellWindows インスタンスを取得する方法を示しています。
#include "exdisp.h"
...
IShellWindows *psw;
HRESULT hr;
hr = CoInitialize(NULL);
if (SUCCEEDED(hr))
{
hr = CoCreateInstance(
CLSID_ShellWindows,
NULL,
CLSCTX_ALL,
IID_IShellWindows,
(void**)&psw
);
if (SUCCEEDED(hr))
{
// Use the IShellWindows instance...
psw->Release();
}
}
メソッド 11
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
Shell ウィンドウのコレクション内のウィンドウ数を取得します。
| Count | INT* | out | Shell ウィンドウのコレクション内のウィンドウ数。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
指定したインデックスに対応する、登録済みの Shell ウィンドウを返します。
| index | VARIANT | in | VT_UI4、VT_I2、または VT_I4 型の VARIANT。型が VT_UI4 の場合、index の値は ShellWindowTypeConstants のメンバーとして解釈されます。この場合、Item はフォアグラウンド ウィンドウに最も近く、型が一致するウィンドウを返します。型が VT_I2 または VT_I4 の場合、index は Shell ウィンドウ コレクションへのインデックスとして扱われます。 |
| Folder | IDispatch** | out | ウィンドウの IDispatch インターフェイスへの参照。指定したウィンドウが見つからなかった場合は NULL。 |
戻り値
Shell ウィンドウのコレクションに対する列挙子を取得します。
| ppunk | IUnknown** | out | このメソッドが返るときに、IEnumVARIANT インターフェイスを実装するオブジェクトへのインターフェイス ポインターを格納します。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
開いているウィンドウを Shell ウィンドウとして登録します。ウィンドウはハンドルで指定します。
| pid | IDispatch* | in | ウィンドウの IDispatch インターフェイス。 |
| hwnd | INT | in | 登録するウィンドウを指定するハンドル。 |
| swClass | ShellWindowTypeConstants | in | ウィンドウの種類を指定する ShellWindowTypeConstants のメンバー。 |
| plCookie | INT* | out | ウィンドウの cookie。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
解説(Remarks)
Shell ウィンドウのコレクションにおける cookie とは、登録済みの Shell ウィンドウを一意に識別するトークンです。
このメソッドは開いているウィンドウを登録するために使用します。ウィンドウが開くのを待機中(pending)の場合は、代わりに IShellWindows::RegisterPending を使用してください。
待機中のウィンドウを Shell ウィンドウとして登録します。ウィンドウは絶対 PIDL で指定します。
| lThreadId | INT | in | スレッド ID。 |
| pvarloc | VARIANT* | in | VT_VARIANT | VT_BYREF 型の VARIANT。pvarloc の値には、登録するウィンドウを指定する絶対 PIDL(PIDLIST_ABSOLUTE)を設定します。 |
| pvarlocRoot | VARIANT* | in | NULL または VT_EMPTY 型でなければなりません。 |
| swClass | ShellWindowTypeConstants | in | ウィンドウの種類を指定する ShellWindowTypeConstants のメンバー。 |
| plCookie | INT* | out | ウィンドウの cookie。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
解説(Remarks)
Shell ウィンドウのコレクションにおける cookie とは、登録済みの Shell ウィンドウを一意に識別するトークンです。
このメソッドは開くのを待機中のウィンドウを登録するために使用します。ウィンドウが既に開いている場合は、代わりに IShellWindows::Register を使用してください。ウィンドウの登録解除には IShellWindows::Revoke を使用します。
Shell ウィンドウの登録を取り消し、そのウィンドウを Shell ウィンドウのコレクションから削除します。
| lCookie | INT | in | 登録解除するウィンドウを識別する cookie。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
解説(Remarks)
Shell ウィンドウのコレクションにおける cookie とは、登録済みの Shell ウィンドウを一意に識別するトークンです。
開いているウィンドウをハンドルで登録するには IShellWindows::Register メソッドを使用します。開くのを待機中のウィンドウを絶対 PIDL で登録するには IShellWindows::RegisterPending メソッドを使用します。
Shell ウィンドウが新しい場所へナビゲートされたときに発生します。
| lCookie | INT | in | ウィンドウを識別する cookie。 |
| pvarLoc | VARIANT* | in | VT_VARIANT | VT_BYREF 型の VARIANT。pvarLoc の値には、新しい場所を指定する絶対 PIDL(PIDLIST_ABSOLUTE)を設定します。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
解説(Remarks)
ウィンドウは Shell ウィンドウとして登録されると cookie が付与されます。詳細については、IShellWindows::Register を参照してください。
Shell ウィンドウのアクティブ化状態が変化したときに発生します。
| lCookie | INT | in | ウィンドウを識別する cookie。 |
| fActive | VARIANT_BOOL | in | ウィンドウがアクティブ化される場合は TRUE、非アクティブ化される場合は FALSE。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
解説(Remarks)
ウィンドウは Shell ウィンドウとして登録されると cookie が付与されます。詳細については、IShellWindows::Register を参照してください。
Shell ウィンドウのコレクション内でウィンドウを検索し、そのウィンドウのハンドルと IDispatch インターフェイスを返します。
| pvarLoc | VARIANT* | in | VT_VARIANT | VT_BYREF 型の VARIANT。pvarLoc の値には、検索するウィンドウを指定する絶対 PIDL(PIDLIST_ABSOLUTE)を設定します(「解説」を参照)。 |
| pvarLocRoot | VARIANT* | in | NULL または VT_EMPTY 型でなければなりません。 |
| swClass | ShellWindowTypeConstants | in | 検索対象に含めるウィンドウの種類を指定する 1 つ以上の ShellWindowTypeConstants フラグ。 |
| phwnd | INT* | out | 指定した検索条件に一致するウィンドウのハンドル。該当するウィンドウが見つからなかった場合は NULL。 |
| swfwOptions | ShellWindowFindWindowOptions | in | 検索オプションを指定する 1 つ以上の ShellWindowFindWindowOptions フラグ。 |
| ppdispOut | IDispatch** | out | ウィンドウの IDispatch インターフェイスへの参照。該当するウィンドウが見つからなかった場合は NULL。 |
戻り値
型: HRESULT
次のいずれかの値、または標準の結果コード。
| 戻り値 | 説明 |
|---|---|
| 指定した検索条件に一致するウィンドウが見つかりました。 | |
| 指定した検索条件に一致するウィンドウが見つかりませんでした。 | |
| ウィンドウは見つかりましたが、そのウィンドウの IDispatch インターフェイスへの参照を取得できませんでした。SWFO_NEEDDISPATCH フラグが設定されている場合にのみ発生します。 | |
| ウィンドウは見つかりましたが、そのウィンドウは開くのを待機中です。SWFO_INCLUDEPENDING フラグが設定されている場合にのみ発生します。 |
解説(Remarks)
SWFO_COOKIEPASSED フラグが設定されている場合、pvarLoc は PIDL ではなく cookie として解釈されます。
フレーム用に新しい Shell ウィンドウが作成されたときに発生します。
| lCookie | INT | in | ウィンドウを識別する cookie。 |
| punk | IUnknown* | in | 新しいウィンドウの IUnknown インターフェイスのアドレス。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
解説(Remarks)
ウィンドウは Shell ウィンドウとして登録されると cookie が付与されます。詳細については、IShellWindows::Register を参照してください。
非推奨です。常に S_OK を返します。
| fAttach | VARIANT_BOOL | in | 使用されません。 |
戻り値
型: HRESULT
常に S_OK を返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IShellWindows "{85CB6900-4D95-11CF-960C-0080C7F4EE85}" #usecom global IShellWindows IID_IShellWindows "{9BA05972-F6A8-11CF-A442-00A0C90A8F39}" #comfunc global IShellWindows_get_Count 7 var #comfunc global IShellWindows_Item 8 int,sptr #comfunc global IShellWindows__NewEnum 9 sptr #comfunc global IShellWindows_Register 10 sptr,int,int,var #comfunc global IShellWindows_RegisterPending 11 int,var,var,int,var #comfunc global IShellWindows_Revoke 12 int #comfunc global IShellWindows_OnNavigate 13 int,var #comfunc global IShellWindows_OnActivated 14 int,int #comfunc global IShellWindows_FindWindowSW 15 var,var,int,var,int,sptr #comfunc global IShellWindows_OnCreated 16 int,sptr #comfunc global IShellWindows_ProcessAttachDetach 17 int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_IShellWindows "{85CB6900-4D95-11CF-960C-0080C7F4EE85}" #usecom global IShellWindows IID_IShellWindows "{9BA05972-F6A8-11CF-A442-00A0C90A8F39}" #comfunc global IShellWindows_get_Count 7 sptr #comfunc global IShellWindows_Item 8 int,sptr #comfunc global IShellWindows__NewEnum 9 sptr #comfunc global IShellWindows_Register 10 sptr,int,int,sptr #comfunc global IShellWindows_RegisterPending 11 int,sptr,sptr,int,sptr #comfunc global IShellWindows_Revoke 12 int #comfunc global IShellWindows_OnNavigate 13 int,sptr #comfunc global IShellWindows_OnActivated 14 int,int #comfunc global IShellWindows_FindWindowSW 15 sptr,sptr,int,sptr,int,sptr #comfunc global IShellWindows_OnCreated 16 int,sptr #comfunc global IShellWindows_ProcessAttachDetach 17 int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。