私はブラウザ ヘルパー オブジェクトに取り組んでおり、イベントを発生させる IWebBrowser2 にアクセスしようとしています。NavigateComplete2 やその他のイベントを使用すると、Invoke のパラメーターへのポインターを取得できるため、簡単に実行できます。
しかし、私はmsdn でこれを読んでいて、TitleChange イベントの唯一のパラメーターはタイトルであると言っているので、イベント TitleChange から webbrowser インターフェイスへのポインターを取得するにはどうすればよいですか?
他のイベントでそれを取得する方法は次のとおりです。
HRESULT STDMETHODCALLTYPE CSiteEvents::Invoke( DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags,
DISPPARAMS __RPC_FAR *Params, VARIANT __RPC_FAR *pVarResult,
EXCEPINFO __RPC_FAR *pExcepInfo, UINT __RPC_FAR *puArgErr )
{
switch ( dispIdMember )
{
case DISPID_DOCUMENTCOMPLETE:
{
IWebBrowser2 *pBrowser = GetBrowser(Params->rgvarg[1]);
// stuff
pBrowser->Release();
}
break;
}
}
IWebBrowser2* GetBrowser(const VARIANT &_Argument)
{
IWebBrowser2 *pBrowser = NULL;
if (_Argument.vt == VT_DISPATCH)
{
HRESULT hr;
IDispatch *pDisp = _Argument.pdispVal;
if (pDisp)
{
hr = pDisp->QueryInterface( IID_IWebBrowser2, reinterpret_cast<void **>(&pBrowser) );
if ( FAILED(hr) )
pBrowser = NULL;
}
}
return pBrowser;
}
Visual Studio 2010 を使用しています。