You are going to have to use the EnvDTE name space, you will then wan to get a DTE object and once you have that, you will be able to get the ActiveSolution, and enumerate the Projects with the solution:You will want to create a class and implement the IDTExtensibility2 implemention on your class. This will require that a method called OnConnection be created. This method has a parameter called Application which can be typed as a DTE or DTE2 object, and this will be your entry point:
Imports EnvDTE
Imports EnvDTE80
Public Class MyAddIn
Implements IDTExtensibility2
Private _DTE As DTE2
Public Sub OnConnection(ByVal application As Object, ByVal connectMode As ext_ConnectMode, ByVal addInInst As Object, ByRef custom As Array) Implements IDTExtensibility2.OnConnection
_DTE = CTYpe(application, DTE2)
End Sub
End Class
You can also create a wizard class that implements the IWizard interface which will give you a similar starting point and you can tie into template that shows up under (New Item). This will allow you to provide additional functionality when creating a new item. This class has a RunStarted method on that implemention and the automationObject is the DTE object in this case.
Once you have the DTE object, you can then get the active solution and project items:
For Each proj As EnvDTE.Project In _DTE.Solution.Projects
'-- You can access the project and pretty much everything associated with that project
For each item as ProjectItem in proj.ProjectItems
Next
Next