Load search URL in browser from Visual Studio

百般思念 提交于 2019-11-29 10:59:51

Here is another version (based on Alex's answer) that will also select the current word you are on. More like the typical F1 help.

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
Alex Angas

Using the link Preet provided I came up with this which starts the default browser:

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

I've come up with this one. As it says, you will need to add a reference to 'System.Web' for HttpUtility.UrlEncode. Also, there's a few 'options' in the code commented out. Parts taken from http://www.codinghorror.com/blog/2005/10/google-search-vsnet-macro.html , but much improved (IMHO).

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
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!