Вот макрос, который должен помочь вам.Обработка ошибок ужасна, но я не могу собрать больше, я абсолютно ненавижу VB:)
Также обратите внимание, что он захватывает только имя типа класса или имя типа интерфейса, вы можете запускать его где угодно, пока вашкурсор находится внутри определения класса или интерфейса.Он будет захватывать имя области действия класса / интерфейса.
Он запускает вызов буфера обмена в потоке, потому что это компонент Windows Forms, и они должны работать в STAThread.
Копируетполное имя в буфере обмена.
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports EnvDTE90a
Imports EnvDTE100
Imports System.Diagnostics
Public Module SkurmedelMacros
Public Sub SetClipboard(ByVal x As Object)
System.Windows.Forms.Clipboard.SetText(CStr(x), System.Windows.Forms.TextDataFormat.Text)
End Sub
Public Sub GetTypeName()
Dim solution As Solution = DTE.Solution
Dim activePoint As TextPoint = CType(DTE.ActiveDocument.Selection, TextSelection).ActivePoint
Dim codeElem As CodeElement = _
DTE.ActiveDocument.ProjectItem.FileCodeModel.CodeElementFromPoint(activePoint, vsCMElement.vsCMElementClass)
If codeElem Is Nothing Then
codeElem = DTE.ActiveDocument.ProjectItem.FileCodeModel.CodeElementFromPoint(activePoint, vsCMElement.vsCMElementInterface)
End If
Dim ClipBoardThread As System.Threading.Thread = New System.Threading.Thread(AddressOf SetClipboard)
With ClipBoardThread
.ApartmentState = System.Threading.ApartmentState.STA
.IsBackground = True
.Start(codeElem.FullName)
.Join()
End With
ClipBoardThread = Nothing
End Sub
End Module