2010-06-13 3 views
1

Я не могу понять, как использовать элемент управления WebBrowser, не создавая окна на панели задач.Как создать элемент управления 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).

Это похоже на довольно простой вопрос, но я нигде не мог найти примеров.

ответ

Смежные вопросы