<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.artinsoft.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Mauricio Rojas Blog : ExtendedBrowser, NewWindow2</title><link>http://blogs.artinsoft.net/mrojas/archive/tags/ExtendedBrowser/NewWindow2/default.aspx</link><description>Tags: ExtendedBrowser, NewWindow2</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>Extended WebBrowser Control Series: WPF WebBrowser and the NewWindow2</title><link>http://blogs.artinsoft.net/mrojas/archive/2009/09/27/wpf-webbrowser-and-the-newwindow2.aspx</link><pubDate>Sun, 27 Sep 2009 07:06:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1982</guid><dc:creator>Mrojas</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.artinsoft.net/mrojas/rsscomments.aspx?PostID=1982</wfw:commentRss><comments>http://blogs.artinsoft.net/mrojas/archive/2009/09/27/wpf-webbrowser-and-the-newwindow2.aspx#comments</comments><description>&lt;p&gt;To be able to catch popup windows and open them in your own window you &lt;br /&gt;have to manage WebBrowser events like NewWindow2. &lt;/p&gt;
&lt;p&gt;But how do you do that in WPF?&lt;/p&gt;
&lt;p&gt;Well it isn’t really that difficult. These are the steps that you have to follow:&lt;/p&gt;
&lt;p&gt;1. Add a COM reference to a reference to %windir%\system32\shdocvw.dll&lt;/p&gt;
&lt;p&gt;2. Add a new CodeFile to your project. Lets say CodeFile1.cs And put this code:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Runtime.InteropServices;
[ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid(&amp;quot;6d5140c1-7436-11ce-8034-00aa006009fa&amp;quot;)]
&lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; IServiceProvider
{

[&lt;span class="kwrd"&gt;return&lt;/span&gt;: MarshalAs(UnmanagedType.IUnknown)] 

&lt;span class="kwrd"&gt;object&lt;/span&gt; QueryService(&lt;span class="kwrd"&gt;ref&lt;/span&gt; Guid guidService, &lt;span class="kwrd"&gt;ref&lt;/span&gt; Guid riid);

}

&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;/pre&gt;
&lt;p&gt;3. To make an easy example. Lets assume we have a very simple window like:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img src="http://farm4.static.flickr.com/3454/3958116810_e6a8e85195.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;And in that form we need some code like this:&lt;/p&gt;&lt;pre class="csharpcode"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; button1_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)
        {
            Guid SID_SWebBrowserApp = &lt;br /&gt;                          &lt;span class="kwrd"&gt;new&lt;/span&gt; Guid(&lt;span class="str"&gt;&amp;quot;0002DF05-0000-0000-C000-000000000046&amp;quot;&lt;/span&gt;);
            IServiceProvider serviceProvider = &lt;br /&gt;                (IServiceProvider)myWebBrowser.Document; //&amp;lt;—It seams that you need to &lt;br /&gt;                                                         // navigate first to initialize this

            Guid serviceGuid = SID_SWebBrowserApp;

            Guid iid = &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(SHDocVw.IWebBrowser2).GUID;
            //Here we will get a reference to the IWebBrowser2 interface
            SHDocVw.IWebBrowser2 myWebBrowser2 = &lt;br /&gt;                   (SHDocVw.IWebBrowser2) &lt;br /&gt;                   serviceProvider.QueryService(&lt;span class="kwrd"&gt;ref&lt;/span&gt; serviceGuid, &lt;span class="kwrd"&gt;ref&lt;/span&gt; iid);&lt;/pre&gt;&lt;pre class="csharpcode"&gt;            //To hook events we just need to do these casts
            SHDocVw.DWebBrowserEvents_Event wbEvents = &lt;br /&gt;                 (SHDocVw.DWebBrowserEvents_Event)myWebBrowser2;
            SHDocVw.DWebBrowserEvents2_Event wbEvents2 = &lt;br /&gt;                  (SHDocVw.DWebBrowserEvents2_Event)myWebBrowser2;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;            //Adding event handlers is now very simple
            wbEvents.NewWindow += &lt;br /&gt;               &lt;span class="kwrd"&gt;new&lt;/span&gt; SHDocVw.DWebBrowserEvents_NewWindowEventHandler(wbEvents_NewWindow);&lt;/pre&gt;&lt;pre class="csharpcode"&gt;            wbEvents2.NewWindow2 += &lt;br /&gt;               &lt;span class="kwrd"&gt;new&lt;/span&gt; SHDocVw.DWebBrowserEvents2_NewWindow2EventHandler(wbEvents2_NewWindow2);

        }

        &lt;span class="kwrd"&gt;void&lt;/span&gt; wbEvents2_NewWindow2(&lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; ppDisp, &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; Cancel)
        {
            //If you want make popup windows to open in your own window&lt;br /&gt;            // you need to assign the ppDisp to the .Application of &lt;br /&gt;            // the WebBrowser in your window&lt;/pre&gt;&lt;pre class="csharpcode"&gt;            Window1 wnd = &lt;span class="kwrd"&gt;new&lt;/span&gt; Window1();
            wnd.Show();&lt;br /&gt;            //Just navigate to make sure .Document is initilialized
            wnd.myWebBrowser.Navigate(&lt;span class="kwrd"&gt;new&lt;/span&gt; Uri(&lt;span class="str"&gt;&amp;quot;about:blank&amp;quot;&lt;/span&gt;));             &lt;br /&gt;            Guid SID_SWebBrowserApp = &lt;span class="kwrd"&gt;new&lt;/span&gt; Guid(&lt;span class="str"&gt;&amp;quot;0002DF05-0000-0000-C000-000000000046&amp;quot;&lt;/span&gt;);
            IServiceProvider serviceProvider = (IServiceProvider)wnd.myWebBrowser.Document;

            Guid serviceGuid = SID_SWebBrowserApp;

            Guid iid = &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(SHDocVw.IWebBrowser2).GUID;

            SHDocVw.IWebBrowser2 myWebBrowser2 = (SHDocVw.IWebBrowser2)serviceProvider.QueryService(&lt;span class="kwrd"&gt;ref&lt;/span&gt; serviceGuid, &lt;span class="kwrd"&gt;ref&lt;/span&gt; iid);

            ppDisp = myWebBrowser2.Application;
        }

        &lt;span class="kwrd"&gt;void&lt;/span&gt; wbEvents_NewWindow(&lt;span class="kwrd"&gt;string&lt;/span&gt; URL, &lt;span class="kwrd"&gt;int&lt;/span&gt; Flags, &lt;span class="kwrd"&gt;string&lt;/span&gt; TargetFrameName, &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; PostData, &lt;span class="kwrd"&gt;string&lt;/span&gt; Headers, &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; Processed)
        {
            MessageBox.Show(URL);
        }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; button2_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)
        {
            myWebBrowser.Navigate(&lt;span class="kwrd"&gt;new&lt;/span&gt; Uri(&lt;span class="str"&gt;&amp;quot;file://D:/MyProjects/ExtendedBrowserExample_v2/test0.htm&amp;quot;&lt;/span&gt;)); 
        }
&lt;/pre&gt;
&lt;p&gt;Now you can manage your popupwindows:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://farm3.static.flickr.com/2570/3957339983_e9bc0a3c78.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;You can download the test application from &lt;a href="http://blogs.artinsoft.net/public_img/WpfWebBrowserNewWindowEvent.zip"&gt;HERE&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1982" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/WebBrowser/default.aspx">WebBrowser</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/NewWindow2/default.aspx">NewWindow2</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/WebBrowserControl/default.aspx">WebBrowserControl</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/ExtendedBrowser/default.aspx">ExtendedBrowser</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/NewWindow3/default.aspx">NewWindow3</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/ExtendedWebBrowser/default.aspx">ExtendedWebBrowser</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Extended/default.aspx">Extended</category></item><item><title>Extended WebBrowser Control Series: NewWindow3</title><link>http://blogs.artinsoft.net/mrojas/archive/2009/08/07/newwindow3.aspx</link><pubDate>Fri, 07 Aug 2009 18:14:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1945</guid><dc:creator>Mrojas</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.artinsoft.net/mrojas/rsscomments.aspx?PostID=1945</wfw:commentRss><comments>http://blogs.artinsoft.net/mrojas/archive/2009/08/07/newwindow3.aspx#comments</comments><description>&lt;p&gt;Recently an user of the &lt;a href="http://blogs.artinsoft.net/mrojas/archive/2009/05/01/opening-popup-in-a-newwindow.aspx"&gt;ExtendedBrowser v2&lt;/a&gt; commented that he needed access to the NewWindow3 event.&lt;/p&gt;
&lt;p&gt;The &lt;a href="http://msdn.microsoft.com/en-us/library/aa768337(VS.85).aspx"&gt;NewWindow3 event&lt;/a&gt; is raised when a new window is to be created. It extends &lt;a href="http://msdn.microsoft.com/en-us/library/aa768336(VS.85).aspx"&gt;NewWindow2&lt;/a&gt; with additional information about the new window.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Syntax&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;strong&gt;Private Sub&lt;/strong&gt;&amp;nbsp;&lt;em&gt;object&lt;/em&gt;_&lt;strong&gt;NewWindow3&lt;/strong&gt;( _
	&lt;strong&gt;ByRef&lt;/strong&gt;&amp;nbsp;&lt;em&gt;ppDisp&lt;/em&gt;&lt;strong&gt; As &lt;strong&gt;Object&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt; _
	&lt;strong&gt;ByRef&lt;/strong&gt;&amp;nbsp;&lt;em&gt;Cancel&lt;/em&gt;&lt;strong&gt; As &lt;strong&gt;Boolean&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt; _
	&lt;strong&gt;ByVal&lt;/strong&gt;&amp;nbsp;&lt;em&gt;dwFlags&lt;/em&gt;&lt;strong&gt; As &lt;strong&gt;Long&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt; _
	&lt;strong&gt;ByVal&lt;/strong&gt;&amp;nbsp;&lt;em&gt;bstrUrlContext&lt;/em&gt;&lt;strong&gt; As &lt;strong&gt;String&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;,&lt;/strong&gt; _
	&lt;strong&gt;ByVal&lt;/strong&gt;&amp;nbsp;&lt;em&gt;bstrUrl&lt;/em&gt;&lt;strong&gt; As &lt;strong&gt;String&lt;/strong&gt;&lt;/strong&gt;)&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Parameters&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;

&lt;em&gt;object&lt;/em&gt;
Object expression that resolves to the objects in the Applies To list. 

&lt;em&gt;ppDisp&lt;/em&gt;
&lt;strong&gt;Object&lt;/strong&gt; expression that, optionally, receives a new, hidden &lt;a href="http://msdn.microsoft.com/en-us/library/aa752085(VS.85).aspx"&gt;WebBrowser&lt;/a&gt; or &lt;a href="http://msdn.microsoft.com/en-us/library/aa752084(VS.85).aspx"&gt;InternetExplorer&lt;/a&gt; object with no URL loaded. 
&lt;em&gt;Cancel&lt;/em&gt;
A &lt;strong&gt;Boolean&lt;/strong&gt; value that determines whether the current navigation should be canceled. 

&lt;code&gt;true&lt;/code&gt;
Cancel the navigation. 
&lt;code&gt;false&lt;/code&gt;
Do not cancel the navigation.
&lt;em&gt;dwFlags&lt;/em&gt;
The flags from the &lt;a href="http://msdn.microsoft.com/en-us/library/bb762518(VS.85).aspx"&gt;NWMF&lt;/a&gt; enumeration that pertain to the new window. 
&lt;p&gt;typedef enum NWMF&amp;nbsp; &lt;br /&gt;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NWMF_UNLOADING = 0x00000001, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NWMF_USERINITED = 0x00000002, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NWMF_FIRST = 0x00000004, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NWMF_OVERRIDEKEY = 0x00000008, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NWMF_SHOWHELP = 0x00000010, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NWMF_HTMLDIALOG = 0x00000020, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NWMF_FROMDIALOGCHILD = 0x00000040, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NWMF_USERREQUESTED = 0x00000080, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NWMF_USERALLOWED = 0x00000100, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NWMF_FORCEWINDOW = 0x00010000, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NWMF_FORCETAB = 0x00020000, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NWMF_SUGGESTWINDOW = 0x00040000, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NWMF_SUGGESTTAB = 0x00080000, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NWMF_INACTIVETAB = 0x00100000 &lt;br /&gt;} NWMF;&lt;/p&gt;

&lt;em&gt;bstrUrlContext&lt;/em&gt;
The URL of the page that is opening the new window. 
&lt;em&gt;bstrUrl&lt;/em&gt;
The URL that is opened in the new window.
&lt;p&gt;Please notice:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note&amp;nbsp;&amp;nbsp; The NewWindow3 event is only fired when a new instance of Internet Explorer is about to be created. Calling &lt;/strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms536759(VS.85).aspx"&gt;&lt;strong&gt;showModalDialog&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; or &lt;/strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms536761(VS.85).aspx"&gt;&lt;strong&gt;showModelessDialog&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; does not trigger an event because they are not new instances of Internet Explorer. They are implemented as MSHTML host windows, which allows them to render and display HTML content but not hyperlinks between documents.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You can download from here&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.artinsoft.net/public_img/ExtendedBrowserExample_v3_1.zip"&gt;DOWNLOAD CODE HERE v3_1&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1945" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/WebBrowser/default.aspx">WebBrowser</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/NewWindow2/default.aspx">NewWindow2</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/WebBrowserControl/default.aspx">WebBrowserControl</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/VB.NET/default.aspx">VB.NET</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/ExtendedBrowser/default.aspx">ExtendedBrowser</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Vb/default.aspx">Vb</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/NewWindow3/default.aspx">NewWindow3</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/NewWindo/default.aspx">NewWindo</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/WEb/default.aspx">WEb</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/ExtendedWebBrowser/default.aspx">ExtendedWebBrowser</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Extended/default.aspx">Extended</category></item><item><title>Extended WebBrowser Control Series: WebBrowser Control and window.Close()</title><link>http://blogs.artinsoft.net/mrojas/archive/2009/05/21/webbrowser-control-and-window-close.aspx</link><pubDate>Fri, 22 May 2009 02:10:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1892</guid><dc:creator>Mrojas</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.artinsoft.net/mrojas/rsscomments.aspx?PostID=1892</wfw:commentRss><comments>http://blogs.artinsoft.net/mrojas/archive/2009/05/21/webbrowser-control-and-window-close.aspx#comments</comments><description>&lt;p&gt;I had previously posted an extended version of the WebBrowser Control. This code posted in &lt;a href="http://blogs.artinsoft.net/mrojas/archive/2009/05/01/opening-popup-in-a-newwindow.aspx"&gt;Opening Popup in a NewWindow&lt;/a&gt; and &lt;a href="http://blogs.artinsoft.net/mrojas/archive/2008/09/18/newwindow2-events-in-the-c-webbrowsercontrol.aspx"&gt;NewWindow2 Events in the C# WebBrowserControl&lt;/a&gt;, dealt with some issues when you want to have a form with a WebBrowser and in the enclosed page you have a Javascript code like:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;window&lt;/strong&gt;.&lt;font color="#0000ff"&gt;open&lt;/font&gt;(&lt;font color="#ff00ff"&gt;“ &amp;lt;some url to a page”&lt;/font&gt;)&lt;/p&gt;
&lt;p&gt;But recently another problem arised. What if you have a Javascript snippet like:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;window&lt;/strong&gt;.&lt;font color="#0000ff"&gt;close&lt;/font&gt;()&lt;/p&gt;
&lt;p&gt;OMG!!! Why haven’t I thought about it. Well Kelder wrote me about this problem and he also sent me some of his\her research results:&lt;/p&gt;
&lt;p&gt;Solution (Add WebBrowser as unmanaged code):&amp;nbsp; blogs.msdn.com/jpsanders/archive/2008/04/23/window-close-freezes-net-2-0-webbrowser-control-in-windows-form-application.aspx&lt;/p&gt;
&lt;p&gt;Solution (Add WebBrowser using WM_NOTIFYPARENT override):blogs.msdn.com/jpsanders/archive/2007/05/25/how-to-close-the-form-hosting-the-webbrowser-control-when-scripting-calls-window-close-in-the-net-framework-version-2-0.aspx&lt;/p&gt;
&lt;p&gt;&lt;a title="http://blogs.msdn.com/jpsanders/archive/2007/05/25/how-to-close-the-form-hosting-the-webbrowser-control-when-scripting-calls-window-close-in-the-net-framework-version-2-0.aspx" href="http://blogs.msdn.com/jpsanders/archive/2007/05/25/how-to-close-the-form-hosting-the-webbrowser-control-when-scripting-calls-window-close-in-the-net-framework-version-2-0.aspx"&gt;http://blogs.msdn.com/jpsanders/archive/2007/05/25/how-to-close-the-form-hosting-the-webbrowser-control-when-scripting-calls-window-close-in-the-net-framework-version-2-0.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Solution (Implementation not detailed): social.msdn.microsoft.com/forums/en-US/winforms/thread/1199c004-9eb2-400d-a118-6e06bca9f1f0/&lt;/p&gt;
&lt;p&gt;Proposes changing pop-up links to WebBrowser navigate: dotnetninja.wordpress.com/2008/02/26/prevent-opening-new-window-from-webbrowser-control/Close &lt;/p&gt;
&lt;p&gt;problem observed (no solution):www.codeproject.com/KB/cpp/ExtendedWebBrowser.aspx&lt;/p&gt;
&lt;p&gt;It seams to me that the better solution is to use jpsanders solution, so I created an ExtendWebBrowser_v2 (the following is the modified fragment):&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;//Extend the WebBrowser control&lt;/span&gt;
&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ExtendedWebBrowser : WebBrowser
{
    
    &lt;span class="rem"&gt;// Define constants from winuser.h&lt;/span&gt;
    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; WM_PARENTNOTIFY = 0x210;
    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; WM_DESTROY = 2;
    
    AxHost.ConnectionPointCookie cookie;
    WebBrowserExtendedEvents events;

    &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; WndProc(&lt;span class="kwrd"&gt;ref&lt;/span&gt; Message m)
    {
        &lt;span class="kwrd"&gt;switch&lt;/span&gt; (m.Msg)
        {
            &lt;span class="kwrd"&gt;case&lt;/span&gt; WM_PARENTNOTIFY:
             &lt;span class="kwrd"&gt;if&lt;/span&gt; (!DesignMode) 
             {
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (m.WParam.ToInt32() == WM_DESTROY) 
                {
                    Message newMsg = &lt;span class="kwrd"&gt;new&lt;/span&gt; Message();
                    newMsg.Msg = WM_DESTROY;
                    &lt;span class="rem"&gt;// Tell whoever cares we are closing&lt;/span&gt;
                    Form parent = &lt;span class="kwrd"&gt;this&lt;/span&gt;.Parent &lt;span class="kwrd"&gt;as&lt;/span&gt; Form;
                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (parent!=&lt;span class="kwrd"&gt;null&lt;/span&gt;)
                        parent.Close();
                }
             }
            DefWndProc(&lt;span class="kwrd"&gt;ref&lt;/span&gt; m);
            &lt;span class="kwrd"&gt;break&lt;/span&gt;;
          &lt;span class="kwrd"&gt;default&lt;/span&gt;:
            &lt;span class="kwrd"&gt;base&lt;/span&gt;.WndProc(&lt;span class="kwrd"&gt;ref&lt;/span&gt; m);
            &lt;span class="kwrd"&gt;break&lt;/span&gt;;
        }
    }&lt;/pre&gt;
&lt;p&gt;The problem that might arise with this solution is that the parent might not be a Form but an user control, etc. For a more general aproach I think I should send a WM_DESTROY directly to the parent, but for most cases it works. I’m attaching the code and a sample page called test0.htm. I hope this helps and rembember you can always donate to programming geeks jejejejeje just kidding&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.artinsoft.net/public_img/ExtendedBrowserExample_v2.zip"&gt;HERE IS THE CODE&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1892" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/.NET+General+Tip/default.aspx">.NET General Tip</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/BUGS/default.aspx">BUGS</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Control/default.aspx">Control</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/WebBrowser/default.aspx">WebBrowser</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/NewWindow2/default.aspx">NewWindow2</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/WebBrowserControl/default.aspx">WebBrowserControl</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/ExtendedBrowser/default.aspx">ExtendedBrowser</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/NewWindow3/default.aspx">NewWindow3</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/ExtendedWebBrowser/default.aspx">ExtendedWebBrowser</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Extended/default.aspx">Extended</category></item><item><title>Extended WebBrowser Control Series: Opening Popup in a NewWindow</title><link>http://blogs.artinsoft.net/mrojas/archive/2009/05/01/opening-popup-in-a-newwindow.aspx</link><pubDate>Sat, 02 May 2009 06:17:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1877</guid><dc:creator>Mrojas</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.artinsoft.net/mrojas/rsscomments.aspx?PostID=1877</wfw:commentRss><comments>http://blogs.artinsoft.net/mrojas/archive/2009/05/01/opening-popup-in-a-newwindow.aspx#comments</comments><description>&lt;p&gt;In a previous &lt;a href="http://blogs.artinsoft.net/mrojas/archive/2008/09/18/newwindow2-events-in-the-c-webbrowsercontrol.aspx"&gt;post&lt;/a&gt;, i had published an “Extended Version” of the WebBrowser control &lt;br /&gt;that gave you access to events like the NewWindow2. &lt;br /&gt;This event that is not public in the common WebBrowser control allows you to intercept &lt;br /&gt;the NewWindow event but gives you the posibility to setup the the ppDisp property witch sets &lt;br /&gt;a pointer to the WebBrowser where the new window will be open.&lt;/p&gt;
&lt;p&gt;So i setup a small example using this “ExtendedBrowser”.&lt;/p&gt;
&lt;p&gt;I created a simple page (well really it was my wife, I know about transport-layer, C++, bits etc, but I never remember HTML syntax):&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;H1&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; This is sample page to test opening a pop up in a new form &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;H1&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;input&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;button&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;onclick&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;window.open(&amp;#39;test0.htm&amp;#39;)&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;And created a simple form like in the following picture: &lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.artinsoft.net/public_img/OpeningPopupinaNewWindow_14723/image.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH:0px;DISPLAY:inline;BORDER-TOP-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-LEFT-WIDTH:0px;" title="image" border="0" alt="image" src="http://blogs.artinsoft.net/public_img/OpeningPopupinaNewWindow_14723/image_thumb.png" width="1028" height="712" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Instead of using a WebBrowser control i just used an &lt;a href="http://blogs.artinsoft.net/mrojas/archive/2008/09/18/newwindow2-events-in-the-c-webbrowsercontrol.aspx"&gt;ExtendedWebBrowser&lt;/a&gt; from my previous post.&lt;/p&gt;
&lt;p&gt;And added code like:&lt;/p&gt;&lt;pre class="csharpcode"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; extendedWebBrowser1_NewWindow2(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, NewWindow2EventArgs e)
        {
            &lt;span class="rem"&gt;//Intercepting this event will allow us to create a new form in which&lt;/span&gt;
            &lt;span class="rem"&gt;//we will open the new webpage, to do that we must set the ppDisp property&lt;/span&gt;
            &lt;span class="rem"&gt;//of the NewWindow2EventArgs&lt;/span&gt;
            FormWithExtendedBrowser form1 = &lt;span class="kwrd"&gt;new&lt;/span&gt; FormWithExtendedBrowser();
            form1.Show();
            e.PPDisp = form1.extendedWebBrowser1.Application;
        }&lt;/pre&gt;
&lt;p&gt;When I run the &lt;a href="http://blogs.artinsoft.net/public_img/ExtendedBrowserExample.zip"&gt;code&lt;/a&gt; , it now opens the pop up in my form:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.artinsoft.net/public_img/OpeningPopupinaNewWindow_14723/image_3.png"&gt;&lt;img style="BORDER-BOTTOM:0px;BORDER-LEFT:0px;DISPLAY:inline;BORDER-TOP:0px;BORDER-RIGHT:0px;" title="image" border="0" alt="image" src="http://blogs.artinsoft.net/public_img/OpeningPopupinaNewWindow_14723/image_thumb_3.png" width="644" height="463" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;But test if for yourself! :) &lt;a href="http://blogs.artinsoft.net/public_img/ExtendedBrowserExample.zip"&gt;HERE IS THE CODE&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1877" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/WebBrowser/default.aspx">WebBrowser</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/NewWindow2/default.aspx">NewWindow2</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/WebBrowserControl/default.aspx">WebBrowserControl</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/ExtendedBrowser/default.aspx">ExtendedBrowser</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/NewWindow3/default.aspx">NewWindow3</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/ExtendedWebBrowser/default.aspx">ExtendedWebBrowser</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Extended/default.aspx">Extended</category></item><item><title>Extended WebBrowser Control Series:NewWindow2 Events in the C#  WebBrowserControl</title><link>http://blogs.artinsoft.net/mrojas/archive/2008/09/18/newwindow2-events-in-the-c-webbrowsercontrol.aspx</link><pubDate>Thu, 18 Sep 2008 17:34:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1689</guid><dc:creator>Mrojas</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.artinsoft.net/mrojas/rsscomments.aspx?PostID=1689</wfw:commentRss><comments>http://blogs.artinsoft.net/mrojas/archive/2008/09/18/newwindow2-events-in-the-c-webbrowsercontrol.aspx#comments</comments><description>&lt;p&gt;The WebBrowser control for .NET is just a wrapper for the IE ActiveX control. However this wrapper does not expose all the events that the IE ActiveX control exposes.&lt;/p&gt;
&lt;p&gt;For example the ActiveX control has a NewWindow2 that you can use to intercept when a new window is gonna be created and you can even use the ppDisp variable to give a pointer to an IE ActiveX instance where you want the new window to be displayed.&lt;/p&gt;
&lt;p&gt;So, our solution was to extend the WebBrowser control to make some of those events public.&lt;/p&gt;
&lt;p&gt;In general the solution is the following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a new Class for your Event that extend any of the basic EventArgs classes.&lt;/li&gt;
&lt;li&gt;Add constructors and property accessor to the class&lt;/li&gt;
&lt;li&gt;Look at the IE Activex info and add the&amp;nbsp; DWebBrowserEvents2 and IWebBrowser2 COM interfaces. We need them to make our hooks.&lt;/li&gt;
&lt;li&gt;Create a WebBrowserExtendedEvents extending System.Runtime.InteropServices.StandardOleMarshalObject and DWebBrowserEvents2. We need this class to intercept the ActiveX events. Add methos for all the events that you want to intercept.&lt;/li&gt;
&lt;li&gt;Extend the WebBrowser control overriding the CreateSink and DetachSink methods, here is where the WebBrowserExtendedEvents class is used to make the conneciton.&lt;/li&gt;
&lt;li&gt;Add EventHandler for all the events.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;And thats all.Here is the code. Just add it to a file like ExtendedWebBrowser.cs&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Forms;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.ComponentModel;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Runtime.InteropServices;

    &lt;span class="rem"&gt;//First define a new EventArgs class to contain the newly exposed data&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; NewWindow2EventArgs : CancelEventArgs
    {

        &lt;span class="kwrd"&gt;object&lt;/span&gt; ppDisp;

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; PPDisp
        {
            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; ppDisp; }
            set { ppDisp = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }
        }


        &lt;span class="kwrd"&gt;public&lt;/span&gt; NewWindow2EventArgs(&lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; ppDisp, &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; cancel)
            : &lt;span class="kwrd"&gt;base&lt;/span&gt;()
        {
            &lt;span class="kwrd"&gt;this&lt;/span&gt;.ppDisp = ppDisp;
            &lt;span class="kwrd"&gt;this&lt;/span&gt;.Cancel = cancel;
        }
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; DocumentCompleteEventArgs : EventArgs
    {
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; ppDisp;
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; url;

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; PPDisp
        {
            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; ppDisp; }
            set { ppDisp = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; Url
        {
            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; url; }
            set { url = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }
        }

       &lt;span class="kwrd"&gt;public&lt;/span&gt; DocumentCompleteEventArgs(&lt;span class="kwrd"&gt;object&lt;/span&gt; ppDisp,&lt;span class="kwrd"&gt;object&lt;/span&gt; url)
        {
           &lt;span class="kwrd"&gt;this&lt;/span&gt;.ppDisp = ppDisp;
           &lt;span class="kwrd"&gt;this&lt;/span&gt;.url = url;

        }
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; CommandStateChangeEventArgs : EventArgs
    {
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;long&lt;/span&gt; command;
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; enable;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; CommandStateChangeEventArgs(&lt;span class="kwrd"&gt;long&lt;/span&gt; command, &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; enable)
        {
            &lt;span class="kwrd"&gt;this&lt;/span&gt;.command = command;
            &lt;span class="kwrd"&gt;this&lt;/span&gt;.enable = enable;
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;long&lt;/span&gt; Command
        {
            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; command; }
            set { command = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; Enable
        {
            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; enable; }
            set { enable = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }
        }
    }


    &lt;span class="rem"&gt;//Extend the WebBrowser control&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ExtendedWebBrowser : WebBrowser
    {
        AxHost.ConnectionPointCookie cookie;
        WebBrowserExtendedEvents events;


        &lt;span class="rem"&gt;//This method will be called to give you a chance to create your own event sink&lt;/span&gt;
        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; CreateSink()
        {
            &lt;span class="rem"&gt;//MAKE SURE TO CALL THE BASE or the normal events won&amp;#39;t fire&lt;/span&gt;
            &lt;span class="kwrd"&gt;base&lt;/span&gt;.CreateSink();
            events = &lt;span class="kwrd"&gt;new&lt;/span&gt; WebBrowserExtendedEvents(&lt;span class="kwrd"&gt;this&lt;/span&gt;);
            cookie = &lt;span class="kwrd"&gt;new&lt;/span&gt; AxHost.ConnectionPointCookie(&lt;span class="kwrd"&gt;this&lt;/span&gt;.ActiveXInstance, events, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(DWebBrowserEvents2));

        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; Application
        {
            get
            {
                IWebBrowser2 axWebBrowser = &lt;span class="kwrd"&gt;this&lt;/span&gt;.ActiveXInstance &lt;span class="kwrd"&gt;as&lt;/span&gt; IWebBrowser2;
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (axWebBrowser != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                {
                    &lt;span class="kwrd"&gt;return&lt;/span&gt; axWebBrowser.Application;
                }
                &lt;span class="kwrd"&gt;else&lt;/span&gt;
                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;null&lt;/span&gt;;
            }
        }

        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; DetachSink()
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;null&lt;/span&gt; != cookie)
            {
                cookie.Disconnect();
                cookie = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
            }
            &lt;span class="kwrd"&gt;base&lt;/span&gt;.DetachSink();
        }

        &lt;span class="rem"&gt;//This new event will fire for the NewWindow2&lt;/span&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;event&lt;/span&gt; EventHandler&amp;lt;NewWindow2EventArgs&amp;gt; NewWindow2;

        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; OnNewWindow2(&lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; ppDisp, &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; cancel)
        {
            EventHandler&amp;lt;NewWindow2EventArgs&amp;gt; h = NewWindow2;
            NewWindow2EventArgs args = &lt;span class="kwrd"&gt;new&lt;/span&gt; NewWindow2EventArgs(&lt;span class="kwrd"&gt;ref&lt;/span&gt; ppDisp, &lt;span class="kwrd"&gt;ref&lt;/span&gt; cancel);
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;null&lt;/span&gt; != h)
            {
                h(&lt;span class="kwrd"&gt;this&lt;/span&gt;, args);
            }
            &lt;span class="rem"&gt;//Pass the cancellation chosen back out to the events&lt;/span&gt;
            &lt;span class="rem"&gt;//Pass the ppDisp chosen back out to the events&lt;/span&gt;
            cancel = args.Cancel;
            ppDisp = args.PPDisp;
        }


        &lt;span class="rem"&gt;//This new event will fire for the DocumentComplete&lt;/span&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;event&lt;/span&gt; EventHandler&amp;lt;DocumentCompleteEventArgs&amp;gt; DocumentComplete;

        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; OnDocumentComplete(&lt;span class="kwrd"&gt;object&lt;/span&gt; ppDisp, &lt;span class="kwrd"&gt;object&lt;/span&gt; url)
        {
            EventHandler&amp;lt;DocumentCompleteEventArgs&amp;gt; h = DocumentComplete;
            DocumentCompleteEventArgs args = &lt;span class="kwrd"&gt;new&lt;/span&gt; DocumentCompleteEventArgs( ppDisp, url);
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;null&lt;/span&gt; != h)
            {
                h(&lt;span class="kwrd"&gt;this&lt;/span&gt;, args);
            }
            &lt;span class="rem"&gt;//Pass the ppDisp chosen back out to the events&lt;/span&gt;
            ppDisp = args.PPDisp;
            &lt;span class="rem"&gt;//I think url is readonly&lt;/span&gt;
        }

        &lt;span class="rem"&gt;//This new event will fire for the DocumentComplete&lt;/span&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;event&lt;/span&gt; EventHandler&amp;lt;CommandStateChangeEventArgs&amp;gt; CommandStateChange;

        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; OnCommandStateChange(&lt;span class="kwrd"&gt;long&lt;/span&gt; command, &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; enable)
        {
            EventHandler&amp;lt;CommandStateChangeEventArgs&amp;gt; h = CommandStateChange;
            CommandStateChangeEventArgs args = &lt;span class="kwrd"&gt;new&lt;/span&gt; CommandStateChangeEventArgs(command, &lt;span class="kwrd"&gt;ref&lt;/span&gt; enable);
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;null&lt;/span&gt; != h)
            {
                h(&lt;span class="kwrd"&gt;this&lt;/span&gt;, args);
            }
        }


        &lt;span class="rem"&gt;//This class will capture events from the WebBrowser&lt;/span&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; WebBrowserExtendedEvents : System.Runtime.InteropServices.StandardOleMarshalObject, DWebBrowserEvents2
        {
            ExtendedWebBrowser _Browser;
            &lt;span class="kwrd"&gt;public&lt;/span&gt; WebBrowserExtendedEvents(ExtendedWebBrowser browser)
            { _Browser = browser; }

            &lt;span class="rem"&gt;//Implement whichever events you wish&lt;/span&gt;
            &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; NewWindow2(&lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; pDisp, &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; cancel)
            {
                _Browser.OnNewWindow2(&lt;span class="kwrd"&gt;ref&lt;/span&gt; pDisp, &lt;span class="kwrd"&gt;ref&lt;/span&gt; cancel);
            }

            &lt;span class="rem"&gt;//Implement whichever events you wish&lt;/span&gt;
            &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; DocumentComplete(&lt;span class="kwrd"&gt;object&lt;/span&gt; pDisp,&lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; url)
            {
                _Browser.OnDocumentComplete( pDisp, url);
            }

            &lt;span class="rem"&gt;//Implement whichever events you wish&lt;/span&gt;
            &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; CommandStateChange(&lt;span class="kwrd"&gt;long&lt;/span&gt; command, &lt;span class="kwrd"&gt;bool&lt;/span&gt; enable)
            {
                _Browser.OnCommandStateChange( command,  &lt;span class="kwrd"&gt;ref&lt;/span&gt; enable);
            }


        }
        [ComImport, Guid(&lt;span class="str"&gt;&amp;quot;34A715A0-6587-11D0-924A-0020AFC7AC4D&amp;quot;&lt;/span&gt;), InterfaceType(ComInterfaceType.InterfaceIsIDispatch), TypeLibType(TypeLibTypeFlags.FHidden)]
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; DWebBrowserEvents2
        {
            [DispId(0x69)]
            &lt;span class="kwrd"&gt;void&lt;/span&gt; CommandStateChange([In] &lt;span class="kwrd"&gt;long&lt;/span&gt; command, [In] &lt;span class="kwrd"&gt;bool&lt;/span&gt; enable);
            [DispId(0x103)]
            &lt;span class="kwrd"&gt;void&lt;/span&gt; DocumentComplete([In, MarshalAs(UnmanagedType.IDispatch)] &lt;span class="kwrd"&gt;object&lt;/span&gt; pDisp, [In] &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; URL);
            [DispId(0xfb)]
            &lt;span class="kwrd"&gt;void&lt;/span&gt; NewWindow2([In, Out, MarshalAs(UnmanagedType.IDispatch)] &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; pDisp, [In, Out] &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; cancel);
        }

        [ComImport, Guid(&lt;span class="str"&gt;&amp;quot;D30C1661-CDAF-11d0-8A3E-00C04FC9E26E&amp;quot;&lt;/span&gt;), TypeLibType(TypeLibTypeFlags.FOleAutomation | TypeLibTypeFlags.FDual | TypeLibTypeFlags.FHidden)]
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; IWebBrowser2
        {
            [DispId(100)]
            &lt;span class="kwrd"&gt;void&lt;/span&gt; GoBack();
            [DispId(0x65)]
            &lt;span class="kwrd"&gt;void&lt;/span&gt; GoForward();
            [DispId(0x66)]
            &lt;span class="kwrd"&gt;void&lt;/span&gt; GoHome();
            [DispId(0x67)]
            &lt;span class="kwrd"&gt;void&lt;/span&gt; GoSearch();
            [DispId(0x68)]
            &lt;span class="kwrd"&gt;void&lt;/span&gt; Navigate([In] &lt;span class="kwrd"&gt;string&lt;/span&gt; Url, [In] &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; flags, [In] &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; targetFrameName, [In] &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; postData, [In] &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; headers);
            [DispId(-550)]
            &lt;span class="kwrd"&gt;void&lt;/span&gt; Refresh();
            [DispId(0x69)]
            &lt;span class="kwrd"&gt;void&lt;/span&gt; Refresh2([In] &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; level);
            [DispId(0x6a)]
            &lt;span class="kwrd"&gt;void&lt;/span&gt; Stop();
            [DispId(200)]
            &lt;span class="kwrd"&gt;object&lt;/span&gt; Application { [&lt;span class="kwrd"&gt;return&lt;/span&gt;: MarshalAs(UnmanagedType.IDispatch)] get; }
            [DispId(0xc9)]
            &lt;span class="kwrd"&gt;object&lt;/span&gt; Parent { [&lt;span class="kwrd"&gt;return&lt;/span&gt;: MarshalAs(UnmanagedType.IDispatch)] get; }
            [DispId(0xca)]
            &lt;span class="kwrd"&gt;object&lt;/span&gt; Container { [&lt;span class="kwrd"&gt;return&lt;/span&gt;: MarshalAs(UnmanagedType.IDispatch)] get; }
            [DispId(0xcb)]
            &lt;span class="kwrd"&gt;object&lt;/span&gt; Document { [&lt;span class="kwrd"&gt;return&lt;/span&gt;: MarshalAs(UnmanagedType.IDispatch)] get; }
            [DispId(0xcc)]
            &lt;span class="kwrd"&gt;bool&lt;/span&gt; TopLevelContainer { get; }
            [DispId(0xcd)]
            &lt;span class="kwrd"&gt;string&lt;/span&gt; Type { get; }
            [DispId(0xce)]
            &lt;span class="kwrd"&gt;int&lt;/span&gt; Left { get; set; }
            [DispId(0xcf)]
            &lt;span class="kwrd"&gt;int&lt;/span&gt; Top { get; set; }
            [DispId(0xd0)]
            &lt;span class="kwrd"&gt;int&lt;/span&gt; Width { get; set; }
            [DispId(0xd1)]
            &lt;span class="kwrd"&gt;int&lt;/span&gt; Height { get; set; }
            [DispId(210)]
            &lt;span class="kwrd"&gt;string&lt;/span&gt; LocationName { get; }
            [DispId(0xd3)]
            &lt;span class="kwrd"&gt;string&lt;/span&gt; LocationURL { get; }
            [DispId(0xd4)]
            &lt;span class="kwrd"&gt;bool&lt;/span&gt; Busy { get; }
            [DispId(300)]
            &lt;span class="kwrd"&gt;void&lt;/span&gt; Quit();
            [DispId(0x12d)]
            &lt;span class="kwrd"&gt;void&lt;/span&gt; ClientToWindow(&lt;span class="kwrd"&gt;out&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; pcx, &lt;span class="kwrd"&gt;out&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; pcy);
            [DispId(0x12e)]
            &lt;span class="kwrd"&gt;void&lt;/span&gt; PutProperty([In] &lt;span class="kwrd"&gt;string&lt;/span&gt; property, [In] &lt;span class="kwrd"&gt;object&lt;/span&gt; vtValue);
            [DispId(0x12f)]
            &lt;span class="kwrd"&gt;object&lt;/span&gt; GetProperty([In] &lt;span class="kwrd"&gt;string&lt;/span&gt; property);
            [DispId(0)]
            &lt;span class="kwrd"&gt;string&lt;/span&gt; Name { get; }
            [DispId(-515)]
            &lt;span class="kwrd"&gt;int&lt;/span&gt; HWND { get; }
            [DispId(400)]
            &lt;span class="kwrd"&gt;string&lt;/span&gt; FullName { get; }
            [DispId(0x191)]
            &lt;span class="kwrd"&gt;string&lt;/span&gt; Path { get; }
            [DispId(0x192)]
            &lt;span class="kwrd"&gt;bool&lt;/span&gt; Visible { get; set; }
            [DispId(0x193)]
            &lt;span class="kwrd"&gt;bool&lt;/span&gt; StatusBar { get; set; }
            [DispId(0x194)]
            &lt;span class="kwrd"&gt;string&lt;/span&gt; StatusText { get; set; }
            [DispId(0x195)]
            &lt;span class="kwrd"&gt;int&lt;/span&gt; ToolBar { get; set; }
            [DispId(0x196)]
            &lt;span class="kwrd"&gt;bool&lt;/span&gt; MenuBar { get; set; }
            [DispId(0x197)]
            &lt;span class="kwrd"&gt;bool&lt;/span&gt; FullScreen { get; set; }
            [DispId(500)]
            &lt;span class="kwrd"&gt;void&lt;/span&gt; Navigate2([In] &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; URL, [In] &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; flags, [In] &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; targetFrameName, [In] &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; postData, [In] &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; headers);
            [DispId(0x1f7)]
            &lt;span class="kwrd"&gt;void&lt;/span&gt; ShowBrowserBar([In] &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; pvaClsid, [In] &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; pvarShow, [In] &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; pvarSize);
            [DispId(-525)]
            WebBrowserReadyState ReadyState { get; }
            [DispId(550)]
            &lt;span class="kwrd"&gt;bool&lt;/span&gt; Offline { get; set; }
            [DispId(0x227)]
            &lt;span class="kwrd"&gt;bool&lt;/span&gt; Silent { get; set; }
            [DispId(0x228)]
            &lt;span class="kwrd"&gt;bool&lt;/span&gt; RegisterAsBrowser { get; set; }
            [DispId(0x229)]
            &lt;span class="kwrd"&gt;bool&lt;/span&gt; RegisterAsDropTarget { get; set; }
            [DispId(0x22a)]
            &lt;span class="kwrd"&gt;bool&lt;/span&gt; TheaterMode { get; set; }
            [DispId(0x22b)]
            &lt;span class="kwrd"&gt;bool&lt;/span&gt; AddressBar { get; set; }
            [DispId(0x22c)]
            &lt;span class="kwrd"&gt;bool&lt;/span&gt; Resizable { get; set; }
        }
   }
&lt;/pre&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1689" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/VIsual+Basic+.NET/default.aspx">VIsual Basic .NET</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/.NET+General+Tip/default.aspx">.NET General Tip</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/VB6+Migration/default.aspx">VB6 Migration</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Software+Development/default.aspx">Software Development</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/WebBrowser/default.aspx">WebBrowser</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/NewWindow2/default.aspx">NewWindow2</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/WebBrowserControl/default.aspx">WebBrowserControl</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/ExtendedBrowser/default.aspx">ExtendedBrowser</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/NewWindow3/default.aspx">NewWindow3</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/ExtendedWebBrowser/default.aspx">ExtendedWebBrowser</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Extended/default.aspx">Extended</category></item></channel></rss>