Используя IE9 и нативный c ++ BHO (ATL), у меня нет проблем с получением события onQuit
Мой BHO происходит от IDispEventImpl, и в SINK_MAP я указываю событие DISPID_ONQUIT:
class ATL_NO_VTABLE CMyBho
:public CComObjectRootEx<CComSingleThreadModel>
...
,IObjectWithSiteImpl<CMyBho>
,IDispEventImpl<1, CMyBho, &DIID_DWebBrowserEvents2, &LIBID_SHDocVw, 1, 1>
{
...
BEGIN_SINK_MAP(CMyBho)
SINK_ENTRY_EX( 1, DIID_DWebBrowserEvents2, DISPID_ONQUIT, onQuit )
END_SINK_MAP()
...
STDMETHODCALLTYPE onQuit( );
...
STDMETHOD(SetSite)(IUnknown* unkSite) {
CComQIPtr<IServiceProvider> ifServiceProvider(unkSite);
CComPtr<IWebBrowser2> ifBrz2;
ifServiceProvider->QueryService( SID_SWebBrowserAPP, IID_IWebBrowser2,
(void**)&ifBrz2 );
this->DispEventAdvise( ifBrz2 );
}
}
Говоря все это, я знаю, что это нативный код (по сравнению с C #) и это IE9 - но, возможно, он подскажет вам, что нужно сделать в вашей реализации C #. Отправьте мне заметку или комментарий, если вам нужен полный исходный код или вам нужна дополнительная помощь.