protected override void AttachInterfaces(object nativeActiveXObject) { axIWebBrowser2 = (SHDocVw.IWebBrowser2)nativeActiveXObject; axIWebBrowser2.Silent = true; axIWebBrowser2.RegisterAsBrowser = true; base.AttachInterfaces(nativeActiveXObject); }
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); }
protected override void AttachInterfaces(object nativeActiveXObject) { Iwb2 = (SHDocVw.IWebBrowser2)nativeActiveXObject; //忽略js错误 Iwb2.Silent = true; base.AttachInterfaces(nativeActiveXObject); }
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); }
protected override void DetachInterfaces() { try { this.Iwb2 = (SHDocVw.IWebBrowser2) null; base.DetachInterfaces(); } catch { } }
protected override void AttachInterfaces(object nativeActiveXObject) { try { this.Iwb2 = (SHDocVw.IWebBrowser2) nativeActiveXObject; this.Iwb2.Silent = true; base.AttachInterfaces(nativeActiveXObject); } catch { } }
// 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); }
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]); }
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); }
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); }
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); }
protected override void DetachInterfaces() { Iwb2 = null; base.DetachInterfaces(); }
protected override void AttachInterfaces(object nativeActiveXObject) { _iwb2 = (SHDocVw.IWebBrowser2)nativeActiveXObject; _iwb2.Silent = true; base.AttachInterfaces(nativeActiveXObject); }
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. } } }
/// <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; }
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 ); } }