| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- 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;
- }
- }
- }
- }
|