public AdvertisingControl() { InitializeComponent(); DWebBrowserEvents2_Event browser = webBrowser.ActiveXInstance as DWebBrowserEvents2_Event; //Workaround which allows to minimize showing time of wait cursor when WebBrowser navigating. updateCursor = () => Dispatcher.Invoke(Mouse.UpdateCursor); if (browser != null) { browser.NewWindow3 += webBrowser_NewWindow3; browser.NavigateError += browser_NavigateError; browser.StatusTextChange += browser_StatusTextChange; browser.TitleChange += browser_TitleChange; IEClients.ForEach(client => client.ProxyChanged += () => { if (!isAnimationPlayed) { timer.Interval = 1; timer.Stop(); timer.Start(); } }); timer.Elapsed += (sender, e) => { updateNumber++; timer.Interval = RefreshInterval.TotalMilliseconds; if (!IsIEUsingProxy) { webBrowser.Navigate(string.Format(adsUri, Context.Get <IVersionProvider>().Version.ToString(), updateNumber)); if (!isAnimationPlayed) { isAnimationPlayed = true; Action action = () => Dispatcher.BeginInvoke(new Action(() => PlayAnimation("ExpandControl"))); action.RunWithDelay(loadAdvertisingTimeout); } } }; timer.Start(); } }
public int SetSite(object pUnkSite) { if (pUnkSite != null) { _pUnkSite = (IWebBrowser2) pUnkSite; _webBrowser2Events = (DWebBrowserEvents2_Event) pUnkSite; SetSiteStartup(); _webBrowser2Events.BeforeNavigate2 += _webBrowser2Events_BeforeNavigate2; } else { SetSiteShutdown(); _webBrowser2Events.BeforeNavigate2 -= _webBrowser2Events_BeforeNavigate2; _pUnkSite = null; _webBrowser2Events = null; } return 0; }
public int SetSite([In, MarshalAs(UnmanagedType.IUnknown)] object pUnkSite) { if (pUnkSite != null) { m_pUnkSite = pUnkSite; m_webBrowser2 = (IWebBrowser2)pUnkSite; m_webBrowser2Events = (DWebBrowserEvents2_Event)pUnkSite; m_webBrowser2Events.DocumentComplete += OnDocumentComplete; m_webBrowser2Events.BeforeNavigate2 += OnBeforeNavigate; } else { m_webBrowser2Events.DocumentComplete -= OnDocumentComplete; m_webBrowser2Events.BeforeNavigate2 -= OnBeforeNavigate; m_pUnkSite = null; } return(0); }
/// <summary> /// Initialize the hook on webBrowser and register document events /// </summary> /// <param name="site">site</param> /// <returns></returns> public int SetSite(object site) { this.site = site; if (this.site != null) { Orange.ConfortPlus.IEExtension.Interfaces.IServiceProvider serviceProv = (Orange.ConfortPlus.IEExtension.Interfaces.IServiceProvider) this.site; Guid guidIWebBrowserApp = Marshal.GenerateGuidForType(typeof(IWebBrowserApp)); Guid guidIWebBrowser2 = Marshal.GenerateGuidForType(typeof(IWebBrowser2)); IntPtr intPtr; serviceProv.QueryService(ref guidIWebBrowserApp, ref guidIWebBrowser2, out intPtr); this.webBrowser = (IWebBrowser2)Marshal.GetObjectForIUnknown(intPtr); DWebBrowserEvents2_Event browserEvent = (DWebBrowserEvents2_Event)this.webBrowser; browserEvent.DocumentComplete += this.OnDocumentComplete; browserEvent.BeforeNavigate2 += this.OnBeforeNavigate2; browserEvent.DownloadBegin += this.OnDownloadBegin; browserEvent.DownloadComplete += this.OnDownloadComplete; } else { if (this.webBrowser != null) { DWebBrowserEvents2_Event browserEvent = (DWebBrowserEvents2_Event)this.webBrowser; browserEvent.DocumentComplete -= this.OnDocumentComplete; browserEvent.BeforeNavigate2 -= this.OnBeforeNavigate2; browserEvent.DownloadBegin -= this.OnDownloadBegin; browserEvent.DownloadComplete -= this.OnDownloadComplete; this.webBrowser = null; } } return(0); }
protected void Release() { if (browserEvents != null) { Marshal.ReleaseComObject(browserEvents); browserEvents = null; } if (browser != null) { Marshal.ReleaseComObject(browser); browser = null; } }
/// <summary> /// IE调用此方法,并传递指向容器Site的IUnknown指针,由此我们可以获得IWebBrowser2接口 /// 并挂载DWebBrowserEvents2事件 /// </summary> /// <param name="site">容器Site的IUnknown指针</param> /// public void SetSite(object site) { // TODO: 添加 BrowserMonitor.SetSite 实现 #region 取得 IWebBrowser2 引用 if (browser != null) Release(); if (site == null) return; browser = site as IWebBrowser2; #endregion #region 检查名称,当且仅当为IEXPLORE.EXE时加载 string hostName = browser.FullName; if (!(hostName.ToUpper().EndsWith("IEXPLORE.EXE"))) { Release(); return; } #endregion #region 挂载浏览器事件 browserEvents = browser as DWebBrowserEvents2_Event; if (browserEvents != null) { browserEvents.DocumentComplete += new DWebBrowserEvents2_DocumentCompleteEventHandler(this.OnDocumentComplete); } else { Release(); return; } #endregion }