using System; using System.ComponentModel; using System.Globalization; using System.Windows.Threading; namespace Muchinfo.WPF.Controls.WebBrowser { public partial class WebBrowserHelper { private System.Windows.Controls.WebBrowser _webBrowser; private object _cookie; public event CancelEventHandler NewWindow; public WebBrowserHelper(System.Windows.Controls.WebBrowser webBrowser) { if (webBrowser == null) throw new ArgumentNullException("webBrowser"); _webBrowser = webBrowser; _webBrowser.Dispatcher.BeginInvoke(new Action(Attach), DispatcherPriority.Loaded); } public void Disconnect() { if (_cookie != null) { _cookie.ReflectInvokeMethod("Disconnect", new Type[] { }, null); _cookie = null; } } private void Attach() { var axIWebBrowser2 = _webBrowser.ReflectGetProperty("AxIWebBrowser2"); var webBrowserEvent = new WebBrowserEvent(this); var cookieType = typeof(System.Windows.Controls.WebBrowser).Assembly.GetType("MS.Internal.Controls.ConnectionPointCookie"); _cookie = Activator.CreateInstance( cookieType, ReflectionService.BindingFlags, null, new[] { axIWebBrowser2, webBrowserEvent, typeof(DWebBrowserEvents2) }, CultureInfo.CurrentUICulture); } private void OnNewWindow(ref bool cancel) { var eventArgs = new CancelEventArgs(cancel); if (NewWindow != null) { NewWindow(_webBrowser, eventArgs); cancel = eventArgs.Cancel; } } } }