【问题标题】:Load search URL in browser from Visual Studio从 Visual Studio 在浏览器中加载搜索 URL
【发布时间】:2010-11-22 23:34:49
【问题描述】:

我发现内置的 Visual Studio 文档资源管理器相关性,尤其是当我使用的更多 SDK 具有最新的在线内容。按 F1 启动文档资源管理器通常会显示一些无用的内容,并且对我来说不再可用。

有什么方法可以在Visual Studio 中按下组合键

  • 默认浏览器会打开搜索引擎的 URL
  • 使用的查询是当前光标位置下的关键字
  • 添加了一个过滤器,例如site:msdn.microsoft.com

我对 VS 中的宏一无所知,但大概这就是我需要的。有谁知道如何进行设置? codez 会很好!

【问题讨论】:

    标签: visual-studio macros msdn


    【解决方案1】:

    这是另一个版本(基于 Alex 的回答),它也将选择您当前所在的单词。更像是典型的 F1 帮助。

    Imports System
    Imports EnvDTE
    Imports EnvDTE80
    Imports EnvDTE90
    Imports System.Diagnostics
    
    Public Module Search
        Sub GoogleSearch()
            AnySearch("http://www.google.com/search?q=.net+")
        End Sub
    
        Sub BingSearch()
            AnySearch("http://www.bing.com/search?q=")
        End Sub
    
        Private Sub AnySearch(ByVal searchUrl)
            Dim strUrl As String
            Dim selection As String = GetSelection()
            If selection <> "" Then
                strUrl = searchUrl + selection
                DTE.ExecuteCommand("nav", strUrl & " /ext")
            Else
                MsgBox("Select text to search for.")
            End If
        End Sub
    
        Private Function GetSelection() As String
            Dim selection As TextSelection = DTE.ActiveDocument.Selection()
            If selection.Text <> "" Then
                Return selection.Text
            Else
                DTE.ExecuteCommand("Edit.SelectCurrentWord")
                selection = DTE.ActiveDocument.Selection()
                Return selection.Text
            End If
        End Function
    End Module
    

    【讨论】:

    • 太棒了!我试图弄清楚如何做到这一点,但无法做到。
    • 这不适用于我的 VS 2005 安装 - 它什么也不做 - 没有错误消息。如果我将 DTE.ExecuteCommand 更改为 System.Diagnostics.Process.Start(strUrl),它会在我的默认浏览器中打开 URL,但浏览器没有获得焦点。 “导航”应该做什么。这在任何地方都有记录吗?而“/ext”,这一切似乎都是 ExecuteCommand 的 msdn 页面中没有提到的魔法。有什么想法可以解决这个问题吗?谢谢。
    • 抱歉,安德鲁,没有回复。我早就转向 Visual Studio 的一个版本,遗憾的是它不再支持宏/脚本。
    【解决方案2】:

    使用链接Preet provided 我想出了这个启动默认浏览器的方法:

    Imports System
    Imports EnvDTE
    Imports EnvDTE80
    Imports EnvDTE90
    Imports System.Diagnostics
    
    Public Module Search
        Sub GoogleSearch()
            AnySearch("http://www.google.com/search?q=")
        End Sub
    
        Sub BingSearch()
            AnySearch("http://www.bing.com/search?q=")
        End Sub
    
        Private Sub AnySearch(ByVal searchUrl)
            Dim strUrl As String
            Dim selection As TextSelection = DTE.ActiveDocument.Selection()
            If selection.Text <> "" Then
                strUrl = searchUrl + selection.Text
                DTE.ExecuteCommand("nav", strUrl & " /ext")
            Else
                MsgBox("Select text to search for.")
            End If
        End Sub
    End Module
    

    【讨论】:

      【解决方案3】:

      我想出了这个。正如它所说,您需要为 HttpUtility.UrlEncode 添加对“System.Web”的引用。此外,注释掉的代码中有一些“选项”。部分取自 http://www.codinghorror.com/blog/2005/10/google-search-vsnet-macro.html ,但有很大改进(恕我直言)。

      Imports System
      Imports EnvDTE
      Imports EnvDTE80
      Imports EnvDTE90
      Imports System.Diagnostics
      
      Public Module HelpFindInBrowser
          Sub HelpFindInBrowser()
              Dim s As String = ActiveWindowSelection().Trim()
              If s.Length > 0 Then
                  OpenURL("http://www.google.com/search?q=" & _
                      Web.HttpUtility.UrlEncode(s))
                  '--------------------------------------------------------------------------
      
                  'You will need to add a reference to 'System.Web' for HttpUtility.UrlEncode !!!
      
                  '--------------------------------------------------------------------------
              End If
          End Sub
      
          Private Sub OpenURL(ByVal inURL As String)
              'specify a non default browser
              'DTE.ExecuteCommand("Tools.Shell", "notepad.exe " & inURL)
      
              'use the default browser:
              DTE.ExecuteCommand("nav", inURL & " /ext")
      
              'to have it in a new visual studio window:
              'DTE.ItemOperations.Navigate(inURL, EnvDTE.vsNavigateOptions.vsNavigateOptionsNewWindow)
      
              'to have it in the default visual studio browser window:
              'DTE.ItemOperations.Navigate(inURL, EnvDTE.vsNavigateOptions.vsNavigateOptionsDefault)
          End Sub
      
          'large part taken from http://www.codinghorror.com/blog/2005/10/google-search-vsnet-macro.html
          Private Function ActiveWindowSelection() As String
              If DTE.ActiveWindow.ObjectKind = EnvDTE.Constants.vsWindowKindOutput Then
                  Return OutputWindowSelection()
              End If
              If DTE.ActiveWindow.ObjectKind = "{57312C73-6202-49E9-B1E1-40EA1A6DC1F6}" Then
                  Return HTMLEditorSelection()
              End If
              Return SelectionText(DTE.ActiveWindow.Selection)
          End Function
      
          Private Function HTMLEditorSelection() As String
              Dim hw As HTMLWindow = ActiveDocument.ActiveWindow.Object
              Dim tw As TextWindow = hw.CurrentTabObject
              Return SelectionText(tw.Selection)
          End Function
      
          Private Function OutputWindowSelection() As String
              Dim w As Window = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput)
              Dim ow As OutputWindow = w.Object
              Dim owp As OutputWindowPane = ow.OutputWindowPanes.Item(ow.ActivePane.Name)
              Return SelectionText(owp.TextDocument.Selection)
          End Function
      
          Private Function SelectionText(ByVal sel As EnvDTE.TextSelection) As String
              If sel Is Nothing Then
                  Return ""
              End If
      
              Dim s As String
      
              If sel.Text.Length = 0 Then
                  s = GetWordUnderCursor(sel)
              Else
                  s = sel.Text
              End If
              'We could limit the text to some minimal size
              'If sel.Text.Length <= 2 Then
              'Return ""
              'End If
              Return s
          End Function
      
          Private Function GetWordUnderCursor(ByVal sel As EnvDTE.TextSelection) As String
              Dim ptStart As EnvDTE.EditPoint = sel.ActivePoint.CreateEditPoint()
      
              Dim theSelectToRight As Boolean = False
      
              If (ptStart.AtStartOfLine) Then
                  theSelectToRight = True
              Else
                  'See if there's a space to the left of ptStart
                  'not at start of line, so moving one left is safe
                  ptStart.CharLeft()
      
                  If (ptStart.GetText(1).Trim() = "") Then
                      theSelectToRight = True
                  End If
      
                  'Back to original position
                  ptStart.CharRight()
              End If
      
      
              If (Not theSelectToRight) Then
                  ptStart.WordLeft(1)
              End If
      
              Dim ptEnd As EnvDTE.EditPoint = ptStart.CreateEditPoint()
              ptEnd.WordRight(1)
      
              Return ptStart.GetText(ptEnd)
          End Function
      
      End Module
      

      【讨论】:

        猜你喜欢
        • 2022-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-28
        • 1970-01-01
        • 1970-01-01
        • 2018-07-19
        • 1970-01-01
        相关资源
        最近更新 更多