2009-08-26 17 views
5

estoy encontrando el menos relevante la mayor parte del contenido hasta a la fecha en la línea, sobre todo porque varios de los SDK que trabajo tienen integrado en Visual Studio Document Explorer. Presionando F1 se inicia el Explorador de documentos generalmente con algo inútil y ya no se puede usar.Cargar URL de búsqueda en el navegador desde Visual Studio

¿Hay alguna manera de que en el de prensa de una combinación de teclas en Visual Studio:

  • el navegador por defecto se abre a la URL de un motor de búsqueda
  • consulta utilizada es la palabra clave en el actual posición del cursor
  • un filtro se añade como site:msdn.microsoft.com

no sé nada acerca de macros en VS, pero p Resumiblemente eso es lo que necesito. ¿Alguien sabe cómo hacer para configurar esto? te codez sería bueno!

Respuesta

5

Aquí es otra versión (en base a la respuesta de Alex) que también seleccionará la palabra actual que se encuentra. Más como la típica ayuda de 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 
+0

Awesome! Estaba intentando averiguar cómo hacer esto y no pude conseguirlo. –

+0

Esto no funciona en mi instalación de VS 2005, simplemente no hace nada, no aparece ningún mensaje de error. Si cambio el DTE.ExecuteCommand a System.Diagnostics.Process.Start (strUrl), abre la URL en mi navegador predeterminado, pero no se le da enfoque al navegador. ¿Qué se supone que debe hacer "nav"? ¿Está esto documentado en algún lugar? Y el "/ ext", todo esto parece magia que no se menciona en la página msdn para ExecuteCommand. ¿Alguna idea de cómo puedo solucionar esto? Gracias. –

+0

Perdón por la falta de respuesta, Andrew. Hace tiempo que pasé a una versión de Visual Studio que lamentablemente ya no es compatible con macros/scripting. –

2

Usando el enlace Preet provided me ocurrió con esta que comienza el navegador por defecto:

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 
1

He encontrado esta. Como dice, tendrá que agregar una referencia a 'System.Web' para HttpUtility.UrlEncode. Además, hay algunas 'opciones' en el código comentadas. Partes tomadas desde http://www.codinghorror.com/blog/2005/10/google-search-vsnet-macro.html, pero muy mejorado (en mi humilde opinión).

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 
Cuestiones relacionadas