1

タスクバーにウィンドウを作成せずに WebBrowser コントロールを使用する方法がわかりません。

JAVA/ActiveX/画像などのダウンロードをブロックするなどの高度な機能を使用する必要があるため、IWebBrowser2 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) 呼び出しを省略すると、Web ページへの移動が正しく機能しません。Navigate() はページ上のすべてをダウンロードするわけではなく、DocumentComplete イベントを発生させません。DoVerb(OLEIVERB_HIDE) を追加すると、DoVerb(OLEDOVERB.OLEIVERB_INPLACEACTIVATE) 呼び出しを省略した場合と同じ動作になります。

これはかなり基本的な質問のようですが、どこにも例が見つかりませんでした。

4

1 に答える 1

0

バグのラップアラウンドを確認してください: WebBrowser が表示されない場合、DocumentComplete は起動しません

于 2010-06-13T18:23:35.713 に答える