如何在没有UI的情况下创建WebBrowser控件(ActiveX / IWebBrowser2)?

时间:2010-06-13 08:29:36

标签: browser iwebbrowser2

我无法弄清楚如何使用WebBrowser控件而不在任务栏中创建窗口。

我正在直接使用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)调用一样。

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

1 个答案:

答案 0 :(得分:0)