2010-06-13 85 views
1

我不知道如何使用WebBrowser控件,而无需在任务栏中创建窗口。如何在没有UI的情况下创建WebBrowser控件(ActiveX/IWebBrowser2)?

我正在使用IWebBrowser2 ActiveX控件,因为我需要使用一些高级功能,如阻止下载JAVA/ActiveX /图像等。这显然不是在WPF或WinForms WebBrowser包装中可用(但这些包装确实有要创建没有UI控制)

的能力,这是我创建的控制代码:

Type webbrowsertype = Type.GetTypeFromCLSID(Iid_Clsids.CLSID_WebBrowser, true); 

m_WBWebBrowser2 = (IWebBrowser2)System.Activator.CreateInstance(webbrowsertype); 
m_WBWebBrowser2.Visible = false; 

m_WBOleObject = (IOleObject)m_WBWebBrowser2; 
int iret = m_WBOleObject.SetClientSite(this); 
iret = m_WBOleObject.SetHostNames("me", string.Empty); 

tagRECT rect = new tagRECT(0, 0, 0, 0); 
tagMSG nullMsg = new tagMSG(); 
m_WBOleInPlaceObject = (IOleInPlaceObject)m_WBWebBrowser2; 

//INPLACEACTIVATE the WB 

iret = m_WBOleObject.DoVerb((int)OLEDOVERB.OLEIVERB_INPLACEACTIVATE, 
     ref nullMsg, this, 0, IntPtr.Zero, ref rect); 

IConnectionPointContainer cpCont = (IConnectionPointContainer)m_WBWebBrowser2; 

Guid guid = typeof(DWebBrowserEvents2).GUID; 
IConnectionPoint m_WBConnectionPoint = null; 
cpCont.FindConnectionPoint(ref guid, out m_WBConnectionPoint); 

m_WBConnectionPoint.Advise(this, out m_dwCookie); 

此代码的工作完美,但它显示在任务栏的窗口。如果我省略了DoVerb(OLEDOVERB.OLEIVERB_INPLACEACTIVATE)调用,那么导航到网页无法正常工作。 Navigate()不会下载页面上的所有内容,也不会触发DocumentComplete事件。如果我添加DoVerb(OLEIVERB_HIDE),那么我得到的行为与我省略DoVerb(OLEDOVERB.OLEIVERB_INPLACEACTIVATE)调用时相同。

这似乎是一个非常基本的问题,但我无法在任何地方找到任何示例。

回答

相关问题