private static void Evaluate(EnvDTE.Window WindowReference, Action <System.Windows.Forms.WebBrowser> OnEvaluate) { ThreadHelper.ThrowIfNotOnUIThread(); //Note: Window of EnvDTE.Constants.vsWindowKindWebBrowser type contains an IWebBrowser2 object using (System.Threading.ManualResetEvent evt = new System.Threading.ManualResetEvent(false)) { System.Threading.Thread STAThread = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart((o) => { try { using (VisualStudioWebBrowser Browser = new VisualStudioWebBrowser(o)) { try { OnEvaluate.Invoke(Browser); } catch { } } } catch { } evt.Set(); })); STAThread.SetApartmentState(System.Threading.ApartmentState.STA); STAThread.Start(WindowReference.Object); evt.WaitOne(); } }
public static Uri GetWebBrowserWindowUrl(EnvDTE.Window WindowReference) { Uri BrowserUrl = new Uri("", UriKind.RelativeOrAbsolute); VisualStudioWebBrowser.Evaluate(WindowReference, new Action <System.Windows.Forms.WebBrowser>((wb) => { BrowserUrl = wb.Url; })); return(BrowserUrl); }
private EnvDTE.Window GetWindow(DTE2 dte2, string url) { var enumerator = dte2.Windows.GetEnumerator(); while (enumerator.MoveNext()) { var window = enumerator.Current as EnvDTE.Window; if (window.ObjectKind.Equals(EnvDTE.Constants.vsWindowKindWebBrowser)) { var url2 = VisualStudioWebBrowser.GetWebBrowserWindowUrl(window).ToString(); //AsmDudeToolsStatic.Output_INFO("Documentation " + window.Caption + " is open. url=" + url2.ToString()); if (url2.Equals(url, StringComparison.InvariantCultureIgnoreCase)) { return(window); } } } return(null); }
private async Task <EnvDTE.Window> GetWindowAsync(DTE2 dte2, string url) { if (!ThreadHelper.CheckAccess()) { await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); } System.Collections.IEnumerator enumerator = dte2.Windows.GetEnumerator(); while (enumerator.MoveNext()) { EnvDTE.Window window = enumerator.Current as EnvDTE.Window; if (window.ObjectKind.Equals(EnvDTE.Constants.vsWindowKindWebBrowser)) { string url2 = VisualStudioWebBrowser.GetWebBrowserWindowUrl(window).ToString(); //AsmDudeToolsStatic.Output_INFO("Documentation " + window.Caption + " is open. url=" + url2.ToString()); if (url2.Equals(url, StringComparison.InvariantCultureIgnoreCase)) { return(window); } } } return(null); }