Как изменить текст в строке заголовка Visual Studio - PullRequest
59 голосов
/ 23 февраля 2009

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

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

Могу ли я написать расширение, которое сделает этот текст <solution-name>: <branch-name> - <Visual Studio>?

Ответы [ 11 ]

56 голосов
/ 15 апреля 2011

Я только что создал небольшое расширение 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/

18 голосов
/ 29 апреля 2011

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

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

3 голосов
/ 23 февраля 2009

Попытка установить 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!");            
}
1 голос
/ 18 февраля 2014

Просто еще одно расширение для изменения заголовка Visual Studio, определив его как выражение: http://visualstudiogallery.msdn.microsoft.com/2e8ebfe4-023f-4c4d-9b7a-d05bbc5cb239

Настройка, использующая «выражение заголовка», делает этот плагин достаточно гибким.

1 голос
/ 04 октября 2012

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

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

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

0 голосов
/ 04 января 2013

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

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

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

0 голосов
/ 15 августа 2012

С 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
0 голосов
/ 23 февраля 2012

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

0 голосов
/ 27 февраля 2009

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

0 голосов
/ 27 февраля 2009

Если честно, я не уверен, что правильно понимаю ваш вопрос, но я задал один здесь, на SO, который, кажется, о схожей проблеме:

Работа с разными версиями / ветвями одного решения Visual Studio 2005

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...