Как изменить текст заголовка Visual Studio

Мы работаем с несколькими разными ветвями одного и того же кода, а при работе с двумя ветвями сразу может запутаться и тратить время.

В настоящее время строка заголовка VS имеет текст <solution-name> - Visual Studio.

Возможно ли, чтобы я написал расширение, которое сделает этот текст <solution-name>: <branch-name> - <Visual Studio>?

Ответ 1

Попытка установить MainWindow.Caption вызывает исключение. Вы должны использовать функцию Win32 SetWindowText, чтобы изменить заголовок, но будьте осторожны: Visual Studio сбрасывает текст заголовка при падении шляпы, поэтому вы должны использовать таймер, чтобы сохранить желаемый текст. Следующий код из класса Connect надстройки будет постоянно (или, пока надстройка будет запущена) сохраните текст в строке заголовка как "Hello World!"

public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
{
    _applicationObject = (DTE2)application;
    _addInInstance = (AddIn)addInInst;
    resetTitleTimer = new Timer(new TimerCallback(SetMainWindowTitle), "Hello world!", 0, 10);
}

[DllImport("user32.dll")]
private static extern bool SetWindowText(IntPtr hWnd, string lpString);
private void SetMainWindowTitle(object state)
{
    IntPtr hWnd = (IntPtr)_applicationObject.MainWindow.HWnd;
    SetWindowText(hWnd, "Hello World!");            
}

Ответ 2

Я только что создал небольшое расширение Visual Studio, которое может помочь: http://visualstudiogallery.msdn.microsoft.com/f3f23845-5b1e-4811-882f-60b7181fa6d6

Это небольшое расширение обнаружит когда два экземпляра Visual Студия работает и меняет заголовок окна Visual Studio укажите имя родительской папки решение. Поэтому он изменится SolutionFolder - Microsoft Visual Studio в SolutionFolderParent\SolutionFolder - Microsoft Visual Studio.

Это особенно полезно, когда разветвление решения: оно становится можно легко определить, какие отрасль, над которой вы работаете, в случае где оба будут иметь одинаковые имя решения.

Официальная страница здесь: http://erwinmayer.com/labs/visual-studio-2010-extension-rename-visual-studio-window-title/

Ответ 3

Ознакомьтесь с последней версией VSCommands 2010 Lite. В нем появилась функция Friendly Solution Name, в которой вы можете настроить шаблон регулярного выражения для извлечения имени ветки из структуры папок и разместить его в заголовке главного окна Visual Studio. Подробнее: http://vscommands.com/releasenotes/3.6.8.0 и http://vscommands.com/releasenotes/3.6.9.0 p >

Страница загрузки MSDN

Ответ 4

Я добавил символическую ссылку с другим именем, ориентированным на файл решения. Откройте решение с символической ссылкой, а заголовок окна имеет название символической ссылки.

В окнах: mklink BlawBranch.sln Blaw.sln

EDIT: Обнаружено, что жесткая ссылка ломается, если целевой файл .sln обновляется нашим исходным элементом управления. Символическая ссылка не имеет такой же проблемы.

Ответ 7

Возможно, проще было бы использовать виртуальные рабочие столы? Спасительная компоновка легче запомнить, вы можете сгруппировать любые связанные окна с соответствующим VS, а переключение будет проще.

Ответ 8

есть свойство по имени AppName для любой среды на основе Visual Studio, которая должна делать трюк.

Ответ 9

От http://www.helixoft.com/blog/archives/32 устанавливает заголовок для текущего имени файла. Он также работает на Visual Studio 10

  Private timer As System.Threading.Timer
Private ideTitle As String = Nothing
Declare Auto Function SetWindowText Lib "user32" (ByVal hWnd As System.IntPtr, _
ByVal lpstring As String) As Boolean

'''<summary>Called when any window in VS gets activated.</summary>
'''<param name="GotFocus">Window that got focus.</param>
'''<param name="LostFocus">Window that lost focus.</param>
Private Sub WindowEvents_WindowActivated(ByVal GotFocus As EnvDTE.Window, ByVal LostFocus As EnvDTE.Window) Handles WindowEvents.WindowActivated
    Try
        If timer Is Nothing Then
            ' Create timer which refreshes the caption because
            ' IDE resets the caption very often
            Dim autoEvent As New System.Threading.AutoResetEvent(False)
            Dim timerDelegate As System.Threading.TimerCallback = _
                AddressOf tick
            timer = New System.Threading.Timer(timerDelegate, autoEvent, 0, 200)
        End If

        If GotFocus.Document Is Nothing Then
            ideTitle = Nothing
        Else
            ideTitle = GotFocus.Document.FullName
            showTitle(ideTitle)
        End If
    Catch ex As System.Exception
    End Try
End Sub

''' <summary>Dispose the timer on IDE shutdown.</summary>
Public Sub DTEEvents_OnBeginShutdown() Handles DTEEvents.OnBeginShutdown
    If Not timer Is Nothing Then
        timer.Dispose()
    End If
End Sub

'''<summary>Called by timer.</summary>
Public Sub tick(ByVal state As Object)
    Try
        If Not ideTitle Is Nothing Then
            showTitle(ideTitle)
        End If
    Catch ex As System.Exception
    End Try
End Sub

'''<summary>Shows the title in main window.</summary>
Private Sub showTitle(ByVal title As String)
    SetWindowText(New System.IntPtr(DTE.MainWindow.HWnd), title & " - " & DTE.Name)
End Sub

Ответ 10

В 2012 году вы должны установить System.Windows.Application.Current.MainWindow.Title, чтобы это работало. Это обновит заголовок TaskBarItem и заголовок MainWindow.

Это возможно только из основного потока, и поскольку заголовок будет обновляться в разных точках Visual Studio, вам нужно подключиться к некоторым событиям и reset к тому, что вы хотели, чтобы это было (в моем AddIn, Я использую некоторые EnvDTE.SolutionEvents среди других).

Надеюсь, что это поможет.