如何使用C#在BHO中使用Internet Explorer OnQuit事件?
我正在尝试使用IE的OnQuit事件,但当我关闭Internet Explorer时,它不会启动。是否有其他方法可以检测IE中的标签关闭或浏览器关闭如何使用C#在BHO中使用Internet Explorer OnQuit事件?,c#,internet-explorer,bho,C#,Internet Explorer,Bho,我正在尝试使用IE的OnQuit事件,但当我关闭Internet Explorer时,它不会启动。是否有其他方法可以检测IE中的标签关闭或浏览器关闭 我在C语言中使用BHO。< P>使用IE9和本机C++ BHO(ATL),我没有问题,获得OnDeCo事件 我的BHO源于IDispenTempl,我在SINK_映射中指定DISPID_ONQUIT事件: class ATL_NO_VTABLE CMyBho :public CComObjectRootEx<CComSingleThr
我在C语言中使用BHO。< P>使用IE9和本机C++ BHO(ATL),我没有问题,获得OnDeCo事件 我的BHO源于IDispenTempl,我在SINK_映射中指定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 );
}
}
class ATL\u NO\u VTABLE CMyBho
:public CComObjectRootEx
...
,IObjectWithSiteImpl
,idispentempl
{
...
开始\u接收器\u映射(CMyBho)
SINK_ENTRY_EX(1,DIID_dwebbrowservents2,DISPID_ONQUIT,ONQUIT)
END_SINK_MAP()
...
STDMETHODCALLTYPE onQuit();
...
标准方法(设置位置)(未知*未知位置){
CComQIPtr ifServiceProvider(未指定站点);
CComPtr ifBrz2;
ifServiceProvider->QueryService(SID_SWebBrowserAPP、IID_IWebBrowser2、,
(无效**)和ifBrz2);
本->分散式台钳(ifBrz2);
}
}
说了这么多,我知道这是本机代码(vs.C#),这是IE9——但也许它会给你一个提示,告诉你在C#实现上需要做什么。如果您需要完整的源代码或需要更多帮助,请发送一个注释或注释。使用IE9和本机C++ BHO(ATL),我没有问题,获得OnDebug事件。 我的BHO源于IDispenTempl,我在SINK_映射中指定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 );
}
}
class ATL\u NO\u VTABLE CMyBho
:public CComObjectRootEx
...
,IObjectWithSiteImpl
,idispentempl
{
...
开始\u接收器\u映射(CMyBho)
SINK_ENTRY_EX(1,DIID_dwebbrowservents2,DISPID_ONQUIT,ONQUIT)
END_SINK_MAP()
...
STDMETHODCALLTYPE onQuit();
...
标准方法(设置位置)(未知*未知位置){
CComQIPtr ifServiceProvider(未指定站点);
CComPtr ifBrz2;
ifServiceProvider->QueryService(SID_SWebBrowserAPP、IID_IWebBrowser2、,
(无效**)和ifBrz2);
本->分散式台钳(ifBrz2);
}
}
说了这么多,我知道这是本机代码(vs.C#),这是IE9——但也许它会给你一个提示,告诉你在C#实现上需要做什么。如果您需要完整的源代码或需要更多帮助,请向我发送注释或评论。如果您正在使用,请按照以下说明:
WebBrowser对象忽略此事件。
。一种解决方案是使用Uri回答中提到的本机代码。如果您正在使用,则按照以下步骤:
WebBrowser对象忽略此事件。
。一种解决方案是使用Uri的答案中提到的本机代码。OnQuit对我来说在IE11上非常有效
处理程序:
public void OnQuit()
{
logger.Debug("Entered OnQuit");
}
接线:
int IObjectWithSite.SetSite(object site)
{
if (site != null)
{
mainWindowBrowser = (WebBrowser)site;
mainWindowBrowser.DocumentComplete += new DWebBrowserEvents2_DocumentCompleteEventHandler(this.OnDocumentComplete);
mainWindowBrowser.OnQuit += new DWebBrowserEvents2_OnQuitEventHandler(this.OnQuit);
}
else
{
mainWindowBrowser.DocumentComplete -= new DWebBrowserEvents2_DocumentCompleteEventHandler(this.OnDocumentComplete);
mainWindowBrowser.OnQuit -= new DWebBrowserEvents2_OnQuitEventHandler(this.OnQuit);
mainWindowBrowser = null;
}
return 0;
}
OnQuit在我使用IE11时非常有效 处理程序:
public void OnQuit()
{
logger.Debug("Entered OnQuit");
}
接线:
int IObjectWithSite.SetSite(object site)
{
if (site != null)
{
mainWindowBrowser = (WebBrowser)site;
mainWindowBrowser.DocumentComplete += new DWebBrowserEvents2_DocumentCompleteEventHandler(this.OnDocumentComplete);
mainWindowBrowser.OnQuit += new DWebBrowserEvents2_OnQuitEventHandler(this.OnQuit);
}
else
{
mainWindowBrowser.DocumentComplete -= new DWebBrowserEvents2_DocumentCompleteEventHandler(this.OnDocumentComplete);
mainWindowBrowser.OnQuit -= new DWebBrowserEvents2_OnQuitEventHandler(this.OnQuit);
mainWindowBrowser = null;
}
return 0;
}