Win32 API 日本語リファレンス
ホームUI.Shell › IShellWindows

IShellWindows

COMIDispatch (デュアル)
IDispatch を実装(デュアルインターフェース)。HSP では comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。
IID85cb6900-4d95-11cf-960c-0080c7f4ee85継承元IDispatch呼び出し名前(IDispatch) または vtbl自前メソッド開始 vtbl7

公式ドキュメント

開いている 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。

vtbl 7 HRESULT get_Count(INT* Count)

Shell ウィンドウのコレクション内のウィンドウ数を取得します。

CountINT*outShell ウィンドウのコレクション内のウィンドウ数。

戻り値

型: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。

vtbl 8 HRESULT Item(VARIANT index, IDispatch** Folder)

指定したインデックスに対応する、登録済みの Shell ウィンドウを返します。

indexVARIANTinVT_UI4VT_I2、または VT_I4 型の VARIANT。型が VT_UI4 の場合、index の値は ShellWindowTypeConstants のメンバーとして解釈されます。この場合、Item はフォアグラウンド ウィンドウに最も近く、型が一致するウィンドウを返します。型が VT_I2 または VT_I4 の場合、index は Shell ウィンドウ コレクションへのインデックスとして扱われます。
FolderIDispatch**outウィンドウの IDispatch インターフェイスへの参照。指定したウィンドウが見つからなかった場合は NULL

戻り値

型: HRESULT

次のいずれかの値、または標準の結果コード。

戻り値 説明
S_OK
指定したウィンドウが見つかりました。
S_FALSE
指定したウィンドウが見つかりませんでした。
vtbl 9 HRESULT _NewEnum(IUnknown** ppunk)

Shell ウィンドウのコレクションに対する列挙子を取得します。

ppunkIUnknown**outこのメソッドが返るときに、IEnumVARIANT インターフェイスを実装するオブジェクトへのインターフェイス ポインターを格納します。

戻り値

型: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。

vtbl 10 HRESULT Register(IDispatch* pid, INT hwnd, ShellWindowTypeConstants swClass, INT* plCookie)

開いているウィンドウを Shell ウィンドウとして登録します。ウィンドウはハンドルで指定します。

pidIDispatch*inウィンドウの IDispatch インターフェイス。
hwndINTin登録するウィンドウを指定するハンドル。
swClassShellWindowTypeConstantsinウィンドウの種類を指定する ShellWindowTypeConstants のメンバー。
plCookieINT*outウィンドウの cookie。

戻り値

型: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。

解説(Remarks)

Shell ウィンドウのコレクションにおける cookie とは、登録済みの Shell ウィンドウを一意に識別するトークンです。

このメソッドは開いているウィンドウを登録するために使用します。ウィンドウが開くのを待機中(pending)の場合は、代わりに IShellWindows::RegisterPending を使用してください。

vtbl 11 HRESULT RegisterPending(INT lThreadId, VARIANT* pvarloc, VARIANT* pvarlocRoot, ShellWindowTypeConstants swClass, INT* plCookie)

待機中のウィンドウを Shell ウィンドウとして登録します。ウィンドウは絶対 PIDL で指定します。

lThreadIdINTinスレッド ID。
pvarlocVARIANT*inVT_VARIANT | VT_BYREF 型の VARIANTpvarloc の値には、登録するウィンドウを指定する絶対 PIDL(PIDLIST_ABSOLUTE)を設定します。
pvarlocRootVARIANT*inNULL または VT_EMPTY 型でなければなりません。
swClassShellWindowTypeConstantsinウィンドウの種類を指定する ShellWindowTypeConstants のメンバー。
plCookieINT*outウィンドウの cookie。

戻り値

型: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。

解説(Remarks)

Shell ウィンドウのコレクションにおける cookie とは、登録済みの Shell ウィンドウを一意に識別するトークンです。

このメソッドは開くのを待機中のウィンドウを登録するために使用します。ウィンドウが既に開いている場合は、代わりに IShellWindows::Register を使用してください。ウィンドウの登録解除には IShellWindows::Revoke を使用します。

vtbl 12 HRESULT Revoke(INT lCookie)

Shell ウィンドウの登録を取り消し、そのウィンドウを Shell ウィンドウのコレクションから削除します。

lCookieINTin登録解除するウィンドウを識別する cookie。

戻り値

型: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。

解説(Remarks)

Shell ウィンドウのコレクションにおける cookie とは、登録済みの Shell ウィンドウを一意に識別するトークンです。

開いているウィンドウをハンドルで登録するには IShellWindows::Register メソッドを使用します。開くのを待機中のウィンドウを絶対 PIDL で登録するには IShellWindows::RegisterPending メソッドを使用します。

vtbl 13 HRESULT OnNavigate(INT lCookie, VARIANT* pvarLoc)

Shell ウィンドウが新しい場所へナビゲートされたときに発生します。

lCookieINTinウィンドウを識別する cookie。
pvarLocVARIANT*inVT_VARIANT | VT_BYREF 型の VARIANTpvarLoc の値には、新しい場所を指定する絶対 PIDL(PIDLIST_ABSOLUTE)を設定します。

戻り値

型: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。

解説(Remarks)

ウィンドウは Shell ウィンドウとして登録されると cookie が付与されます。詳細については、IShellWindows::Register を参照してください。

vtbl 14 HRESULT OnActivated(INT lCookie, VARIANT_BOOL fActive)

Shell ウィンドウのアクティブ化状態が変化したときに発生します。

lCookieINTinウィンドウを識別する cookie。
fActiveVARIANT_BOOLinウィンドウがアクティブ化される場合は TRUE、非アクティブ化される場合は FALSE

戻り値

型: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。

解説(Remarks)

ウィンドウは Shell ウィンドウとして登録されると cookie が付与されます。詳細については、IShellWindows::Register を参照してください。

vtbl 15 HRESULT FindWindowSW(VARIANT* pvarLoc, VARIANT* pvarLocRoot, ShellWindowTypeConstants swClass, INT* phwnd, ShellWindowFindWindowOptions swfwOptions, IDispatch** ppdispOut)

Shell ウィンドウのコレクション内でウィンドウを検索し、そのウィンドウのハンドルと IDispatch インターフェイスを返します。

pvarLocVARIANT*inVT_VARIANT | VT_BYREF 型の VARIANTpvarLoc の値には、検索するウィンドウを指定する絶対 PIDL(PIDLIST_ABSOLUTE)を設定します(「解説」を参照)。
pvarLocRootVARIANT*inNULL または VT_EMPTY 型でなければなりません。
swClassShellWindowTypeConstantsin検索対象に含めるウィンドウの種類を指定する 1 つ以上の ShellWindowTypeConstants フラグ。
phwndINT*out指定した検索条件に一致するウィンドウのハンドル。該当するウィンドウが見つからなかった場合は NULL
swfwOptionsShellWindowFindWindowOptionsin検索オプションを指定する 1 つ以上の ShellWindowFindWindowOptions フラグ。
ppdispOutIDispatch**outウィンドウの IDispatch インターフェイスへの参照。該当するウィンドウが見つからなかった場合は NULL

戻り値

型: HRESULT

次のいずれかの値、または標準の結果コード。

戻り値 説明
S_OK
指定した検索条件に一致するウィンドウが見つかりました。
S_FALSE
指定した検索条件に一致するウィンドウが見つかりませんでした。
E_NOINTERFACE
ウィンドウは見つかりましたが、そのウィンドウの IDispatch インターフェイスへの参照を取得できませんでした。SWFO_NEEDDISPATCH フラグが設定されている場合にのみ発生します。
E_PENDING
ウィンドウは見つかりましたが、そのウィンドウは開くのを待機中です。SWFO_INCLUDEPENDING フラグが設定されている場合にのみ発生します。

解説(Remarks)

SWFO_COOKIEPASSED フラグが設定されている場合、pvarLoc は PIDL ではなく cookie として解釈されます。

vtbl 16 HRESULT OnCreated(INT lCookie, IUnknown* punk)

フレーム用に新しい Shell ウィンドウが作成されたときに発生します。

lCookieINTinウィンドウを識別する cookie。
punkIUnknown*in新しいウィンドウの IUnknown インターフェイスのアドレス。

戻り値

型: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。

解説(Remarks)

ウィンドウは Shell ウィンドウとして登録されると cookie が付与されます。詳細については、IShellWindows::Register を参照してください。

vtbl 17 HRESULT ProcessAttachDetach(VARIANT_BOOL fAttach)

非推奨です。常に S_OK を返します。

fAttachVARIANT_BOOLin使用されません。

戻り値

型: HRESULT

常に S_OK を返します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 不要)。