新規ウィンドウ表示でIEが起動するのをなくそうと、
NewWindow で検索したら、色々引っかかりました。

http://main.tinyjoker.net/Tech/CSharp/WebBrowser%A5%B3%A5%F3%A5%C8%A5%ED%A1%BC%A5%EB%A4%CBNewWindow2%A5%A4%A5%D9%A5%F3%A5%C8%A4%F2%BC%C2%C1%F5%A4%B9%A4%EB.html
http://vsug.jp/tabid/63/forumid/45/threadid/9273/scope/posts/Default.aspx

上2つを組み合わせて、やっとできた。。
NewWindow2とNewWindow3の違いがわからない。。。

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.Security.Permissions;

namespace ABCS.Classes
{
    public class MySnapWebBrowser : WebBrowserEx
    {
        private string beforeurl_ = null;
        private Form parentForm_ = null;

        private TabControl tabcontrol_ = null;
        public MySnapWebBrowser(TabControl tabcontrol, Form parentForm)
            : base()
        {
            this.tabcontrol_ = tabcontrol;
            this.NewWindow2 += new WebBrowserNewWindow2EventHandler(webBrowser_NewWindow2);
            //this.BeforeNavigate += new EventHandler(OnBeforeNavigate);
            this.BeforeNewWindow += new EventHandler(OnMyBeforeNewWindow);
            this.parentForm_ = parentForm;
        }
        
        protected void OnMyBeforeNewWindow(object sender, EventArgs e)
        {
            WebBrowserExtendedNavigatingEventArgs we = e as WebBrowserExtendedNavigatingEventArgs;
            if (we != null)
            {
                this.beforeurl_ = we.Url;
            }
        }
        /*
        protected void OnBeforeNavigate(object sender, EventArgs e)
        {
            WebBrowserExtendedNavigatingEventArgs we = e as WebBrowserExtendedNavigatingEventArgs;
            //cancel = false;
            if( we != null )
            {
                this.beforeurl_ = we.Url;
            }
        }
        */
        // 新しくウィンドウを開かれようとするときに発生する
        void webBrowser_NewWindow2(object sender, WebBrowserNewWindow2EventArgs e)
        {
            MyTabPageWithWeb tab = new MyTabPageWithWeb(this.parentForm_, this.beforeurl_);

            
            // 新しい WebBrowser の初期化
            //WebBrowserEx newBrowser = new WebBrowserEx();
            //newBrowser.Dock = DockStyle.Fill;

            // 新しい WebBrowser のコンテナ(下記はタブの場合)
            //var tabPage = new TabPage();
            //tab.Controls.Add(newBrowser);
            this.tabcontrol_.TabPages.Add(tab);

            // 新しい WebBrowser に表示させる設定
            //e.ppDisp = newBrowser.Application;
            //newBrowser.RegisterAsBrowser = true;
            e.ppDisp = tab.ChildWebBrowser.Application;
            tab.ChildWebBrowser.RegisterAsBrowser = true;

            // 新しい WebBrowser からさらにウィンドウを開かれるときも同じようにする
            //newBrowser.NewWindow2 += webBrowser_NewWindow2;
            tab.ChildWebBrowser.NewWindow2 += webBrowser_NewWindow2;

            //newBrowser.Navigate(this.beforeurl_);
            //tab.ChildWebBrowser.Navigate(this.beforeurl_);

            this.tabcontrol_.SelectTab(tab);

            e.Cancel = true;
        }
    }

    public class WebBrowserEx : ExtendedWebBrowser
    {
#region NewWindow2 イベント関連

        private AxHost.ConnectionPointCookie cookie;
        private WebBrowser2EventHelper helper;

        [DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Hidden)]
        [DispIdAttribute(200)]
        public object Application
        {
            get
            {
                if (this.ActiveXInstance == null)
                {
                    throw new AxHost.InvalidActiveXStateException("Application", AxHost.ActiveXInvokeKind.PropertyGet);
                }
                return (this.ActiveXInstance as IWebBrowser2).Application;
            }
        }

        [DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Hidden)]
        [DispIdAttribute(552)]
        public bool RegisterAsBrowser
        {
            get
            {
                if (this.ActiveXInstance == null)
                {
                    throw new AxHost.InvalidActiveXStateException("RegisterAsBrowser", AxHost.ActiveXInvokeKind.PropertyGet);
                }
                return (this.ActiveXInstance as IWebBrowser2).RegisterAsBrowser;
            }
            set
            {
                if (this.ActiveXInstance == null)
                {
                    throw new AxHost.InvalidActiveXStateException("RegisterAsBrowser", AxHost.ActiveXInvokeKind.PropertyGet);
                }
                (this.ActiveXInstance as IWebBrowser2).RegisterAsBrowser = value;
            }
        }

        [PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")]
        protected override void CreateSink()
        {
            base.CreateSink();
            helper = new WebBrowser2EventHelper(this);
            cookie = new AxHost.ConnectionPointCookie(this.ActiveXInstance, helper, typeof(DWebBrowserEvents2));
        }

        [PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")]
        protected override void DetachSink()
        {
            if (cookie != null)
            {
                cookie.Disconnect();
                cookie = null;
            }
            base.DetachSink();
        }

        public event WebBrowserNewWindow2EventHandler NewWindow2;

        protected virtual void OnNewWindow2(WebBrowserNewWindow2EventArgs e)
        {
            NewWindow2(this, e);
        }

        private class WebBrowser2EventHelper : StandardOleMarshalObject, DWebBrowserEvents2
        {
            private WebBrowserEx parent;

            public WebBrowser2EventHelper(WebBrowserEx parent)
            {
                this.parent = parent;
            }

            public void NewWindow2(ref object ppDisp, ref bool cancel)
            {
                WebBrowserNewWindow2EventArgs e = new WebBrowserNewWindow2EventArgs(ppDisp);
                this.parent.OnNewWindow2(e);
                ppDisp = e.ppDisp;
                cancel = e.Cancel;
            }

            void ABCS.Classes.ExtendedWebBrowser.DWebBrowserEvents2.NewWindow3(object ppDisp , ref bool cancel , ref object a2, ref object a3, ref object a4)
            {
                WebBrowserNewWindow2EventArgs e = new WebBrowserNewWindow2EventArgs(ppDisp);
                this.parent.OnNewWindow2(e);
                ppDisp = e.ppDisp;
                cancel = e.Cancel;
            }

            void ABCS.Classes.ExtendedWebBrowser.DWebBrowserEvents2.BeforeNavigate2(object sender, ref object a1, ref object a2, ref object a3, ref object a4, ref object a5, ref bool a6)
            {
            }
            
        }
        #endregion

    }

    public delegate void WebBrowserNewWindow2EventHandler(object sender, WebBrowserNewWindow2EventArgs e);

    public class WebBrowserNewWindow2EventArgs : CancelEventArgs
    {
        private object ppdisp_ = null;
        public object ppDisp {
            get
            {
                return this.ppdisp_;
            }
            set
            {
                this.ppdisp_ = value;
            }
        }

        public WebBrowserNewWindow2EventArgs(object ppDisp)
        {
            this.ppDisp = ppDisp;
        }
    }

    [ComImport, Guid("34A715A0-6587-11D0-924A-0020AFC7AC4D")]
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    [TypeLibType(TypeLibTypeFlags.FHidden)]
    public interface DWebBrowserEvents2
    {
        [DispId(251)]
        void NewWindow2(
        [InAttribute(), OutAttribute(), MarshalAs(UnmanagedType.IDispatch)] ref object ppDisp,
        [InAttribute(), OutAttribute()] ref bool cancel);
    }

    [ComImport, Guid("D30C1661-CDAF-11D0-8A3E-00C04FC9E26E")]
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface IWebBrowser2
    {
        object Application { get; }
        bool RegisterAsBrowser { get; set; }
    }




    public class WebBrowserExtendedNavigatingEventArgs : CancelEventArgs
    {
        private string _Url;
        public string Url
        {
            get { return _Url; }
        }

        private string _Frame;
        public string Frame
        {
            get { return _Frame; }
        }

        public WebBrowserExtendedNavigatingEventArgs(string url, string frame)
            : base()
        {
            _Url = url;
            _Frame = frame;
        }
    }

    public class ExtendedWebBrowser : System.Windows.Forms.WebBrowser
    {
        protected string url_ = null;

        System.Windows.Forms.AxHost.ConnectionPointCookie cookie;
        WebBrowserExtendedEvents events;

        //This method will be called to give you a chance to create your own event sink
        protected override void CreateSink()
        {
            //MAKE SURE TO CALL THE BASE or the normal events won't fire
            base.CreateSink();
            events = new WebBrowserExtendedEvents(this);
            cookie = new System.Windows.Forms.AxHost.ConnectionPointCookie(this.ActiveXInstance, events, typeof(DWebBrowserEvents2));
        }

        protected override void DetachSink()
        {
            if (null != cookie)
            {
                cookie.Disconnect();
                cookie = null;
            }
            base.DetachSink();
        }

        //This new event will fire when the page is navigating
        public event EventHandler BeforeNavigate;
        public event EventHandler BeforeNewWindow;

        protected void OnBeforeNewWindow(string url, out bool cancel)
        {
            EventHandler h = BeforeNewWindow;
            WebBrowserExtendedNavigatingEventArgs args = new WebBrowserExtendedNavigatingEventArgs(url, null);
            if (null != h)
            {
                h(this, args);
            }
            cancel = args.Cancel;
        }

        protected void OnBeforeNavigate(string url, string frame, out bool cancel)
        {
            EventHandler h = BeforeNavigate;
            WebBrowserExtendedNavigatingEventArgs args = new WebBrowserExtendedNavigatingEventArgs(url, frame);
            if (null != h)
            {
                h(this, args);
            }
            //Pass the cancellation chosen back out to the events
            cancel = args.Cancel;
        }

        //This class will capture events from the WebBrowser
        class WebBrowserExtendedEvents : System.Runtime.InteropServices.StandardOleMarshalObject, DWebBrowserEvents2
        {
            ExtendedWebBrowser _Browser;
            public WebBrowserExtendedEvents(ExtendedWebBrowser browser) { _Browser = browser; }

            //Implement whichever events you wish
            public void BeforeNavigate2(object pDisp, ref object URL, ref object flags, ref object targetFrameName, ref object postData, ref object headers, ref bool cancel)
            {
                _Browser.OnBeforeNavigate((string)URL, (string)targetFrameName, out cancel);
                _Browser.url_ = URL.ToString();
            }

            public void NewWindow3(object pDisp, ref bool cancel, ref object flags, ref object URLContext, ref object URL)
            {
                _Browser.OnBeforeNewWindow((string)URL, out cancel);
            }

        }

        [System.Runtime.InteropServices.ComImport(), System.Runtime.InteropServices.Guid("34A715A0-6587-11D0-924A-0020AFC7AC4D"),
        System.Runtime.InteropServices.InterfaceTypeAttribute(System.Runtime.InteropServices.ComInterfaceType.InterfaceIsIDispatch),
        System.Runtime.InteropServices.TypeLibType(System.Runtime.InteropServices.TypeLibTypeFlags.FHidden)]
        public interface DWebBrowserEvents2
        {

            [System.Runtime.InteropServices.DispId(250)]
            void BeforeNavigate2(
                [System.Runtime.InteropServices.In,
                System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.IDispatch)] object pDisp,
                [System.Runtime.InteropServices.In] ref object URL,
                [System.Runtime.InteropServices.In] ref object flags,
                [System.Runtime.InteropServices.In] ref object targetFrameName, [System.Runtime.InteropServices.In] ref object postData,
                [System.Runtime.InteropServices.In] ref object headers,
                [System.Runtime.InteropServices.In,
                System.Runtime.InteropServices.Out] ref bool cancel);
            [System.Runtime.InteropServices.DispId(273)]
            void NewWindow3(
                [System.Runtime.InteropServices.In,
                System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.IDispatch)] object pDisp,
                [System.Runtime.InteropServices.In, System.Runtime.InteropServices.Out] ref bool cancel,
                [System.Runtime.InteropServices.In] ref object flags,
                [System.Runtime.InteropServices.In] ref object URLContext,
                [System.Runtime.InteropServices.In] ref object URL);
        }
    }

}