Example #1
0
 protected override void AttachInterfaces(object nativeActiveXObject)
 {
     axIWebBrowser2                   = (SHDocVw.IWebBrowser2)nativeActiveXObject;
     axIWebBrowser2.Silent            = true;
     axIWebBrowser2.RegisterAsBrowser = true;
     base.AttachInterfaces(nativeActiveXObject);
 }
Example #2
0
        void wbEvents2_NewWindow2(ref object ppDisp, ref bool Cancel)
        {
            Window1 wnd = new Window1();

            wnd.Show();
            wnd.myWebBrowser.Navigate(new Uri("about:blank"));
            //wnd.myWebBrowser.Navigating += new System.Windows.Navigation.NavigatingCancelEventHandler(myWebBrowser_Navigating);

            Guid             SID_SWebBrowserApp = new Guid("0002DF05-0000-0000-C000-000000000046");
            IServiceProvider serviceProvider    = (IServiceProvider)wnd.myWebBrowser.Document;

            Guid serviceGuid = SID_SWebBrowserApp;

            Guid iid = typeof(SHDocVw.IWebBrowser2).GUID;

            SHDocVw.IWebBrowser2 myWebBrowser2 = (SHDocVw.IWebBrowser2)serviceProvider.QueryService(ref serviceGuid, ref iid);

            ppDisp = myWebBrowser2.Application;

            SHDocVw.DWebBrowserEvents2_Event wbEvents2 = (SHDocVw.DWebBrowserEvents2_Event)myWebBrowser2;
            wbEvents2.NewWindow2             += new SHDocVw.DWebBrowserEvents2_NewWindow2EventHandler(wbEvents2_NewWindow2);
            wbEvents2.NavigateError          += new SHDocVw.DWebBrowserEvents2_NavigateErrorEventHandler(wbEvents2_NavigateError);
            wbEvents2.RedirectXDomainBlocked += new SHDocVw.DWebBrowserEvents2_RedirectXDomainBlockedEventHandler(wbEvents2_RedirectXDomainBlocked);
            wbEvents2.ThirdPartyUrlBlocked   += new SHDocVw.DWebBrowserEvents2_ThirdPartyUrlBlockedEventHandler(wbEvents2_ThirdPartyUrlBlocked);
        }
Example #3
0
 protected override void AttachInterfaces(object nativeActiveXObject)
 {
     Iwb2 = (SHDocVw.IWebBrowser2)nativeActiveXObject;
     //忽略js错误
     Iwb2.Silent = true;
     base.AttachInterfaces(nativeActiveXObject);
 }
Example #4
0
        private void Zoom(int zoomValue)
        {
            SHDocVw.IWebBrowser2 wb      = (SHDocVw.IWebBrowser2)webBrowser1.ActiveXInstance;
            SHDocVw.OLECMDID     cmdZoom = (SHDocVw.OLECMDID) 63;
            Object pvaIn  = zoomValue;
            Object pvaOut = null;

            wb.ExecWB(cmdZoom, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT, ref pvaIn, ref pvaOut);
        }
Example #5
0
 protected override void DetachInterfaces()
 {
   try
   {
     this.Iwb2 = (SHDocVw.IWebBrowser2) null;
     base.DetachInterfaces();
   }
   catch
   {
   }
 }
Example #6
0
 protected override void AttachInterfaces(object nativeActiveXObject)
 {
   try
   {
     this.Iwb2 = (SHDocVw.IWebBrowser2) nativeActiveXObject;
     this.Iwb2.Silent = true;
     base.AttachInterfaces(nativeActiveXObject);
   }
   catch
   {
   }
 }
Example #7
0
        // Returns null in case of failure.
        public static IHTMLDocument2 GetDocumentFromWindow(IHTMLWindow2 htmlWindow)
        {
            if (htmlWindow == null)
            {
                return(null);
            }

            // First try the usual way to get the document.
            try
            {
                IHTMLDocument2 doc = htmlWindow.document;
                return(doc);
            }
            catch (COMException comEx)
            {
                // I think COMException won't be ever fired but just to be sure ...
                if (comEx.ErrorCode != E_ACCESSDENIED)
                {
                    return(null);
                }
            }
            catch (System.UnauthorizedAccessException)
            {
            }
            catch
            {
                // Any other error.
                return(null);
            }

            // At this point the error was E_ACCESSDENIED because the frame contains a document from another domain.
            // IE tries to prevent a cross frame scripting security issue.
            try
            {
                // Convert IHTMLWindow2 to IWebBrowser2 using IServiceProvider.
                IServiceProvider sp = (IServiceProvider)htmlWindow;

                // Use IServiceProvider.QueryService to get IWebBrowser2 object.
                Object brws = null;
                sp.QueryService(ref IID_IWebBrowserApp, ref IID_IWebBrowser2, out brws);

                // Get the document from IWebBrowser2.
                SHDocVw.IWebBrowser2 browser = (SHDocVw.IWebBrowser2)(brws);

                mshtml.IHTMLDocument2 doc = browser.Document as mshtml.IHTMLDocument2;
                return((IHTMLDocument2)doc);
            }
            catch
            {
            }

            return(null);
        }
Example #8
0
        private int Zoom()
        {
            SHDocVw.IWebBrowser2 browserInst = ((SHDocVw.IWebBrowser2)(this.ActiveXInstance));
            object pvaIn  = aZoomLevel[nIdxZoom];
            object pvaOut = 0;

            while (browserInst.Busy)
            {
                ;
            }

            browserInst.ExecWB(SHDocVw.OLECMDID.OLECMDID_OPTICAL_ZOOM,
                               SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT, ref pvaIn, ref pvaOut);
            return(aZoomLevel[nIdxZoom]);
        }
Example #9
0
        private bool TrySetUIHandler()
        {
            SHDocVw.IWebBrowser2 webBrowser2 = this.ActiveXInstance as SHDocVw.IWebBrowser2;
            if (webBrowser2 == null)
            {
                return(false);
            }

            ICustomDoc document = webBrowser2.Document as ICustomDoc;

            if (document == null)
            {
                return(false);
            }

            document.SetUIHandler((WebBrowserSiteEx)CreateWebBrowserSiteBase());
            return(true);
        }
Example #10
0
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            Guid             SID_SWebBrowserApp = new Guid("0002DF05-0000-0000-C000-000000000046");
            IServiceProvider serviceProvider    = (IServiceProvider)myWebBrowser.Document;

            Guid serviceGuid = SID_SWebBrowserApp;

            Guid iid = typeof(SHDocVw.IWebBrowser2).GUID;

            SHDocVw.IWebBrowser2             myWebBrowser2 = (SHDocVw.IWebBrowser2)serviceProvider.QueryService(ref serviceGuid, ref iid);
            SHDocVw.DWebBrowserEvents_Event  wbEvents      = (SHDocVw.DWebBrowserEvents_Event)myWebBrowser2;
            SHDocVw.DWebBrowserEvents2_Event wbEvents2     = (SHDocVw.DWebBrowserEvents2_Event)myWebBrowser2;
            wbEvents.NewWindow               += new SHDocVw.DWebBrowserEvents_NewWindowEventHandler(wbEvents_NewWindow);
            wbEvents2.NewWindow2             += new SHDocVw.DWebBrowserEvents2_NewWindow2EventHandler(wbEvents2_NewWindow2);
            wbEvents2.NavigateError          += new SHDocVw.DWebBrowserEvents2_NavigateErrorEventHandler(wbEvents2_NavigateError);
            wbEvents2.RedirectXDomainBlocked += new SHDocVw.DWebBrowserEvents2_RedirectXDomainBlockedEventHandler(wbEvents2_RedirectXDomainBlocked);
            wbEvents2.ThirdPartyUrlBlocked   += new SHDocVw.DWebBrowserEvents2_ThirdPartyUrlBlockedEventHandler(wbEvents2_ThirdPartyUrlBlocked);
        }
Example #11
0
        private void Zoom(object zoomPercent)
        {
            // grab a handle to the underlying ActiveX object
            IServiceProvider serviceProvider = null;

            if (this.webReport.Document != null)
            {
                serviceProvider = (IServiceProvider)this.webReport.Document;
            }
            Guid serviceGuid = SID_SWebBrowserApp;
            Guid iid         = typeof(SHDocVw.IWebBrowser2).GUID;

            SHDocVw.IWebBrowser2 browserInst = (SHDocVw.IWebBrowser2)serviceProvider.QueryService(ref serviceGuid, ref iid);

            while (browserInst.QueryStatusWB(SHDocVw.OLECMDID.OLECMDID_OPTICAL_ZOOM) != (SHDocVw.OLECMDF.OLECMDF_SUPPORTED & SHDocVw.OLECMDF.OLECMDF_ENABLED))
            {
            }

            // send the zoom command to the ActiveX object
            browserInst.ExecWB(SHDocVw.OLECMDID.OLECMDID_OPTICAL_ZOOM, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, ref zoomPercent, IntPtr.Zero);
        }
Example #12
0
        protected override void DetachInterfaces()
        {
            Iwb2 = null;

            base.DetachInterfaces();
        }
Example #13
0
 protected override void AttachInterfaces(object nativeActiveXObject)
 {
     _iwb2 = (SHDocVw.IWebBrowser2)nativeActiveXObject;
     _iwb2.Silent = true;
     base.AttachInterfaces(nativeActiveXObject);
 }
Example #14
0
        private static void ApplyZoom(DependencyObject src)
        {
            const int   k_minZoom         = 10;
            const int   k_maxZoom         = 1000;
            const float k_zoomInReference = 800.0f;


            var browser = src as WpfWebBrowserWrapper;

            if (browser != null && browser.IsLoaded)
            {
                WebBrowser webbr = browser.m_innerBrowser;

                int zoomPercent = browser.Zoom;

                // Determine auto-zoom
                if (browser.Zoom == -1)
                {
                    if (browser.ActualWidth < k_zoomInReference)
                    {
                        zoomPercent = (int)(browser.ActualWidth / k_zoomInReference * 100);
                    }
                    else
                    {
                        zoomPercent = 100;
                    }
                }

                // rescue too high or too low values
                zoomPercent = Math.Min(zoomPercent, k_maxZoom);
                zoomPercent = Math.Max(zoomPercent, k_minZoom);

                // grab a handle to the underlying ActiveX object
                IServiceProvider serviceProvider = null;
                if (webbr.Document != null)
                {
                    serviceProvider = (IServiceProvider)webbr.Document;
                }
                if (serviceProvider == null)
                {
                    return;
                }

                Guid serviceGuid = SID_SWebBrowserApp;
                Guid iid         = typeof(SHDocVw.IWebBrowser2).GUID;
                SHDocVw.IWebBrowser2 browserInst = (SHDocVw.IWebBrowser2)serviceProvider.QueryService(ref serviceGuid, ref iid);

                try
                {
                    object zoomPercObj = zoomPercent;
                    // send the zoom command to the ActiveX object
                    browserInst.ExecWB(SHDocVw.OLECMDID.OLECMDID_OPTICAL_ZOOM,
                                       SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER,
                                       ref zoomPercObj,
                                       IntPtr.Zero);
                }
                catch (Exception)
                {
                    // ignore this dynamic call if it fails.
                }
            }
        }
Example #15
0
        /// <summary>
        /// コンテンツキャプチャ
        /// </summary>
        private void GetCaptureImageInternal()
        {
            if (InvokeRequired)
            {
                // 別スレッドから呼び出された場合
                Invoke(new GetCaptureImageInternalDelegate(GetCaptureImageInternal));
                return;
            }

            Bitmap rt = null;
            Size   curSize;

            try
            {
                #region コンテンツのボディー部を取得

                HtmlDocument htmlDoc = Document;
                if (htmlDoc == null)
                {
                    throw new NullReferenceException();
                }
                HtmlElement element = htmlDoc.Body;
                if (element == null)
                {
                    throw new NullReferenceException();
                }
                IOleObject oleObj = (IOleObject)htmlDoc.DomDocument;
                if (oleObj == null)
                {
                    throw new NullReferenceException();
                }

                #endregion

                #region コンテンツの情報を記憶

                // スクロール位置を記憶
                Point scrOrg = new Point();
                scrOrg.X = element.Parent.ScrollLeft;
                scrOrg.Y = element.Parent.ScrollTop;

                #endregion

                #region コンテンツをキャプチャ用に調整

                // 一時的に拡大率を変更する
                if (zoomNowRate != captureZoomRate)
                {
                    SHDocVw.IWebBrowser2 browser = (SHDocVw.IWebBrowser2)ActiveXInstance;
                    object izoom = (Int32)captureZoomRate;
                    object ozoom = (Int32)0;
                    browser.ExecWB(SHDocVw.OLECMDID.OLECMDID_OPTICAL_ZOOM,
                                   SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT,
                                   ref izoom, ref ozoom);
                }

                // コンテンツサイズ計算(スクロールバー分大きくする)
                oleObj.GetExtent(DVASPECT.DVASPECT_CONTENT, out curSize);
                Rectangle conRect = new Rectangle(0, 0,
                                                  (int)(element.ScrollRectangle.Size.Width * captureZoomRate / 100 + 0.5),
                                                  (int)(element.ScrollRectangle.Size.Height * captureZoomRate / 100 + 0.5)
                                                  );
                conRect.Width  += SystemInformation.VerticalScrollBarWidth;
                conRect.Height += SystemInformation.HorizontalScrollBarHeight;

                #endregion

                if (captureDrawMode == CaptureDrawModes.OleDraw)
                {
                    rt = new Bitmap(conRect.Width, conRect.Height);
                }
                else
                {
                    rt = new Bitmap(this.Size.Width, this.Size.Height);
                }
                Graphics g  = Graphics.FromImage(rt);
                IntPtr   dc = g.GetHdc();
                try
                {
                    #region コンテンツ全体をキャプチャ

                    switch (captureDrawMode)
                    {
                    case CaptureDrawModes.OleDraw:
                        #region OleDrawによるキャプチャ
                    {
                        IntPtr pUnk = Marshal.GetIUnknownForObject(ActiveXInstance);
                        try
                        {
                            // コンテンツ描画範囲をコンテンツサイズに設定
                            Size drawSize = PixelToHIMETRIC(conRect.Size, dc);
                            oleObj.SetExtent(DVASPECT.DVASPECT_CONTENT, ref drawSize);

                            // 描画
                            OleDraw(pUnk, DVASPECT.DVASPECT_CONTENT, dc, ref conRect);
                        }
                        catch (Exception es)
                        {
                            ThreadExceptionDialog ed = new ThreadExceptionDialog(es);
                            ed.ShowDialog();
                        }
                        finally
                        {
                            Marshal.Release(pUnk);
                        }
                    }
                        #endregion
                        break;

                    case CaptureDrawModes.PrintWindow:
                        #region PrintWindowによるキャプチャ
                    {
                        // 表示サイズで取得
                        PrintWindow(Handle, dc, 0);
                    }
                        #endregion
                        break;
                    }

                    #endregion
                }
                catch (Exception es)
                {
                    ThreadExceptionDialog ed = new ThreadExceptionDialog(es);
                    ed.ShowDialog();
                }
                finally
                {
                    g.ReleaseHdc(dc);
                    g.Dispose();
                }

                #region コンテンツを元に戻す

                // 拡大率とコンテンツサイズを戻す
                if (zoomNowRate != captureZoomRate)
                {
                    SHDocVw.IWebBrowser2 browser = (SHDocVw.IWebBrowser2)ActiveXInstance;
                    object izoom = (Int32)zoomNowRate;
                    object ozoom = (Int32)0;
                    browser.ExecWB(SHDocVw.OLECMDID.OLECMDID_OPTICAL_ZOOM,
                                   SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT,
                                   ref izoom, ref ozoom);
                }
                oleObj.SetExtent(DVASPECT.DVASPECT_CONTENT, ref curSize);

                // スクロール位置を戻す
                SetPosition(scrOrg);

                #endregion
            }
            catch (NullReferenceException)
            {
                if (rt == null)
                {
                    rt = new Bitmap(1, 1);
                }
            }
            catch (Exception es)
            {
                ThreadExceptionDialog ed = new ThreadExceptionDialog(es);
                ed.ShowDialog();
            }
            imageOrigin = rt;
        }
Example #16
0
    public void HookForEvents( HookEventType[] delegateTypes )
    {
        _delegateTypes = delegateTypes;

        try
        {
            Guid ieServiceIdentifier = new Guid( "0002DF05-0000-0000-C000-000000000046" );
            Guid ieInterfaceIdentifier = typeof( SHDocVw.IWebBrowser2 ).GUID;

            IServiceProvider serviceProvider = (IServiceProvider) _wpfWebBrowser.Document;

            _webBrowser2 = (SHDocVw.IWebBrowser2) serviceProvider.QueryService( ref ieServiceIdentifier, ref ieInterfaceIdentifier );

            _webBrowserEvents = (SHDocVw.DWebBrowserEvents_Event) _webBrowser2;
            _webBrowserEvents2 = (SHDocVw.DWebBrowserEvents2_Event) _webBrowser2;
        }
        catch( Exception ex )
        {
            throw new WpfWebBrowserExtenderComBindException( String.Empty, ex );
        }

        Dictionary<HookEventType,HookForEventDelegate> 
            hookForEvent = new Dictionary<HookEventType, HookForEventDelegate>();
            hookForEvent.Add( HookEventType.DownloadBegin       , HookForEventDownloadBegin             );
            hookForEvent.Add( HookEventType.ProgressChange      , HookForEventPageLoadProgressUpdate    );
            hookForEvent.Add( HookEventType.DownloadComplete    , HookForEventDownloadComplete          );
            hookForEvent.Add( HookEventType.NavigateError       , HookForEventNavigateError             );
            hookForEvent.Add( HookEventType.NavigateComplete    , HookForEventNavigateComplete2         );
            hookForEvent.Add( HookEventType.NewWindow           , HookForEventNewWindow                 );
        
        foreach( HookEventType dt in _delegateTypes )
        {
            hookForEvent[ dt ]( _webBrowserEvents, _webBrowserEvents2 );
        }
    }