AntonioGanci

Il blog di Antonio Ganci
posts - 201, comments - 420, trackbacks - 31

Macro per Vistual Studio .NET 2005 per eseguire un commando con parametro il path dell'item selezionato del Solution Explorer

Nel progetto che sto seguendo ho avuto la necessità di creare una macro per Visual Studio 2005 che esegua un comando passando come parametro il path dell'item selezionato nel Solution Explorer.

Elencherò tutti i passi necessari per aggiungere la macro al proprio progetto:

Per prima cosa apriamo il Macros IDE (menu Tools -> Macros -> Macros IDE oppure Alt + F11), clic col il destro sul progetto MyMacros, dal context menu clic su Add Module e scegliamo un nome per il modulo, nel mio caso userò RunCommandModule.

Se i passi sono stati eseguiti correttamente dovremmo visualizzare qualcosa del genere:

Macros IDE

A questo punto aggiungiamo una funzione che ritorni il nodo selezionato del Solution Explorer:

Public Module RunCommandModule

    Private Function GetFirstSelectedProjectItem() As UIHierarchyItem

        Dim UIHSolutionExplorer As UIHierarchy

        UIHSolutionExplorer = DTE.Windows.Item(Constants.vsext_wk_SProjectWindow).Object

        Dim UIHierarchyItems() As Object

        UIHierarchyItems = UIHSolutionExplorer.SelectedItems

        If UIHierarchyItems.Length = 0 Then

            GetFirstSelectedProjectItem = Nothing

        Else

            GetFirstSelectedProjectItem = UIHierarchyItems(0)

        End If

    End Function

End Module

A me serve solo il primo item selezionato, ma se volete lanciare il comando su tutti gli item selezionati basta far ritornare un Array di UIHierarchyItem.

Ogni UIHierarchyItem contiene una property Object in cui il Type dipende dal nodo selezionato. Nel nostro caso ci interessano i nodi di tipo ProjectItem.

Aggiungiamo quindi un metodo per estrarre il path da un UIHierarchyItem:

    Private Function GetPath(ByVal item As UIHierarchyItem) As String

        Dim projectItem As EnvDTE.ProjectItem

        If TypeOf (item.Object) Is EnvDTE.ProjectItem Then

            projectItem = item.Object

            GetPath = projectItem.FileNames(1)

        Else

            GetPath = ""

        End If

    End Function

A questo punto aggiungiamo il metodo, questa volta, public RunCommand:

    Public Sub RunCommand()

        Dim selectedItem As UIHierarchyItem

        selectedItem = GetFirstSelectedProjectItem()

        If selectedItem Is Nothing Then

            MsgBox("You should select a project item")

            Exit Sub

        End If

        Dim path As String

        path = GetPath(selectedItem)

        If Len(path) = 0 Then

            MsgBox("Invalid selected item")

            Exit Sub

        End If

 

        Shell("somecommand.exe " & path, AppWinStyle.NormalFocus, True)

    End Sub

Ovviamente bisognerà sostituire al primo parametro del metodo Shell il nome corretto del comando da seguire.

Se aveste bisogno di chiedere all'utente ulteriori parametri si può usare il metodo InputBox. Es:

        Dim parameter As String

        parameter = InputBox("Enter a string")

In questo caso quando lanciate la macro vi apparirà una finestra del tipo:

Input Box

Non rimane altro che aggiungere una voce al context menu del progetto. Per far questo chiudiamo il Macros IDE clic con il destro sulla toolbar e clic su customize:

Customize menu

Dal Tab Toolbars selezioniamo Context Menus poi selezioniamo il tab Commands da Categories selezioniamo Macros e dall'elenco a Destra trasciniamo il comando MyMacros.RunCommandModule.RunCommand nel menu Project and Solution Context menu -> Item.

Print | posted on martedì 22 gennaio 2008 14:38 | Filed Under [ Tips ]

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET