IExplorerBrowserEvents
COM公式ドキュメント
Explorer ブラウザーのナビゲーションおよびビュー作成イベントを通知するためのメソッドを公開します。
解説(Remarks)
IExplorerBrowser のナビゲーションおよびビュー作成イベントの通知を受け取るには、このインターフェイスを実装します。実装することで、必要に応じてこれらのイベントを処理できるようになります。
IExplorerBrowser イベントの通知を受け取りたい実装者 (クライアント) は、その旨を IExplorerBrowser に通知する必要があります。クライアントは IExplorerBrowser::Advise メソッドを呼び出してこれを行います。これにより、IExplorerBrowser は IExplorerBrowserEvents のメソッドを使用してクライアントへイベントのコールバックを行えるようになります。イベントのコールバックを停止するには、クライアントは IExplorerBrowser::Unadvise メソッドを呼び出す必要があります。呼び出さない場合、メモリリークが発生する可能性があります。
最初のナビゲーション (IExplorerBrowser::BrowseToObject) の際、Explorer はこのインターフェイスのメソッドを同期的に呼び出します。それ以降は、Explorer はこれらを非同期的に呼び出します。イベントコールバックの順序は次のとおりです。IExplorerBrowserEvents::OnNavigationPending、IExplorerBrowserEvents::OnViewCreated、そして、ナビゲーションが成功したか失敗したかに応じて IExplorerBrowserEvents::OnNavigationComplete または IExplorerBrowserEvents::OnNavigationFailed です。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
Explorer ブラウザーが Shell フォルダーへナビゲートしようとしていることをクライアントに通知します。
| pidlFolder | ITEMIDLIST* | in | フォルダーを指定する PIDL です。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
Explorer ブラウザーは、フォルダーへナビゲートする前、すなわち IExplorerBrowserEvents::OnNavigationFailed または IExplorerBrowserEvents::OnNavigationComplete を呼び出す前に、このメソッドを呼び出します。
このメソッドから E_NOTIMPL を含む任意の失敗コードを返すと、ナビゲーションはキャンセルされます。
Explorer ブラウザーのビューが作成され、変更可能になったことをクライアントに通知します。
| psv | IShellView* | in | IShellView へのポインターです。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
Explorer ブラウザーは、ビューが表示される前にクライアントが Explorer ブラウザーのビューへ任意の変更を加えられるようにするために、このメソッドを呼び出します。たとえば、ビューモードやフォルダーフラグを設定するために使用します。
Explorer ブラウザーが Shell フォルダーへのナビゲーションに成功したことをクライアントに通知します。
| pidlFolder | ITEMIDLIST* | in | フォルダーを指定する PIDL です。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは、ビューの作成が成功したことを前提として、IExplorerBrowserEvents::OnViewCreated メソッドの後に呼び出されます。
ナビゲーションおよびビュー作成の後、ナビゲーション先へ到達できたかどうかに応じて、IExplorerBrowserEvents::OnNavigationComplete または IExplorerBrowserEvents::OnNavigationFailed のいずれかが呼び出されます。たとえば、パスへの経路が存在しない、あるいはユーザーがキャンセルしたなどの理由でナビゲーション先へ到達できなかった場合は、ナビゲーションの失敗となります。
Explorer ブラウザーが Shell フォルダーへのナビゲーションに失敗したことをクライアントに通知します。
| pidlFolder | ITEMIDLIST* | in | フォルダーを指定する PIDL です。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは、ビューの作成が成功したことを前提として、IExplorerBrowserEvents::OnViewCreated メソッドの後に呼び出されます。
ナビゲーションおよびビュー作成の後、ナビゲーション先へ到達できたかどうかに応じて、IExplorerBrowserEvents::OnNavigationComplete または IExplorerBrowserEvents::OnNavigationFailed のいずれかが呼び出されます。たとえば、パスへの経路が存在しない、あるいはユーザーがキャンセルしたなどの理由でナビゲーション先へ到達できなかった場合は、ナビゲーションの失敗となります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IExplorerBrowserEvents "{361BBDC7-E6EE-4E13-BE58-58E2240C810F}" #usecom global IExplorerBrowserEvents IID_IExplorerBrowserEvents "{}" #comfunc global IExplorerBrowserEvents_OnNavigationPending 3 var #comfunc global IExplorerBrowserEvents_OnViewCreated 4 sptr #comfunc global IExplorerBrowserEvents_OnNavigationComplete 5 var #comfunc global IExplorerBrowserEvents_OnNavigationFailed 6 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IExplorerBrowserEvents "{361BBDC7-E6EE-4E13-BE58-58E2240C810F}" #usecom global IExplorerBrowserEvents IID_IExplorerBrowserEvents "{}" #comfunc global IExplorerBrowserEvents_OnNavigationPending 3 sptr #comfunc global IExplorerBrowserEvents_OnViewCreated 4 sptr #comfunc global IExplorerBrowserEvents_OnNavigationComplete 5 sptr #comfunc global IExplorerBrowserEvents_OnNavigationFailed 6 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。