web-dev-qa-db-fra.com

Comment modifier le texte de la barre de titre de Visual Studio

Nous travaillons sur plusieurs branches différentes du même code, et lorsque vous travaillez sur deux branches à la fois, cela peut devenir source de confusion et de perte de temps.

Actuellement, la barre de titre VS contient le texte <solution-name> - Visual Studio.

Est-il possible pour moi d'écrire une extension qui rendra ce texte <solution-name>: <branch-name> - <Visual Studio>?

60
ProfK

Essayer de définir MainWindow.Caption lève une exception. Vous devez utiliser la fonction Win32 SetWindowText pour modifier le titre, mais attention: Visual Studio réinitialise le texte de la barre de titre à la baisse d'un chapeau, vous devez donc implémenter un Timer pour continuer à définir le texte souhaité. Le code suivant de la classe Connect du complément conservera de manière permanente (ou, tant que le complément est en cours d'exécution) le texte de la barre de titre "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!");            
}
3
ProfK

Je viens de créer une petite extension Visual Studio qui peut aider: http://visualstudiogallery.msdn.Microsoft.com/f3f23845-5b1e-4811-882f-60b7181fa6d6

Cette petite extension détecte chaque fois que deux instances de Visual Studio sont en cours d'exécution et modifie le titre de la fenêtre de Visual Studio pour inclure le nom du dossier parent de la solution. Il va donc changer SolutionFolder - Microsoft Visual Studio en SolutionFolderParent\SolutionFolder - Microsoft Visual Studio .

Cela est particulièrement utile lors du branchement d'une solution: il devient possible d'identifier facilement la branche sur laquelle vous travaillez, dans le cas où les deux auraient le même nom de solution.

Page officielle ici: http://erwinmayer.com/labs/visual-studio-2010-extension-rename-visual-studio-window-title/

56
Erwin Mayer

Découvrez la dernière version de VSCommands 2010 Lite . Il a introduit une fonctionnalité appelée Friendly Solution Name où vous pouvez configurer un modèle d'expression régulière pour extraire le nom de la branche de la structure de dossiers et le placer dans le titre de la fenêtre principale de Visual Studio. Plus de détails: http://vscommands.com/releasenotes/3.6.8. et http://vscommands.com/releasenotes/3.6.9.

Page de téléchargement MSDN

18
Registered User

Juste une autre extension pour changer la barre de titre de Visual Studio en la définissant comme une expression: http://visualstudiogallery.msdn.Microsoft.com/2e8ebfe4-023f-4c4d-9b7a-d05bbc5cb239

La configuration qui utilise une "expression de titre" rend ce plugin assez flexible.

1
pasztorpisti

J'ai ajouté un lien symbolique avec un nom différent ciblant le fichier de solution. Ouvrez la solution avec le lien symbolique et le titre de la fenêtre a le nom du lien symbolique.

Dans les fenêtres: mklink BlawBranch.sln Blaw.sln

EDIT: Trouvé qu'un lien dur se casse si le fichier .sln cible est mis à jour par notre contrôle de source. Un lien symbolique n'a pas le même problème.

1
conical

En 2012, vous devez définir System.Windows.Application.Current.MainWindow.Title pour que cela fonctionne. Cela mettra à jour le titre TaskBarItem et le titre MainWindow.

Cela n'est possible qu'à partir du thread principal et puisque le titre sera mis à jour à différents moments par Visual Studio, vous devez vous connecter à certains événements et le réinitialiser à ce que vous vouliez qu'il soit (dans mon AddIn, j'utilise un EnvDTE.SolutionEvents entre autres).

J'espère que cela t'aides.

0
kata

Une solution plus simple consisterait peut-être à utiliser des bureaux virtuels? La disposition spatiale est plus facile à retenir, vous pouvez grouper toutes les fenêtres associées avec le VS correspondant, et la commutation serait plus simple.

0
Eevee

il existe une propriété nommée AppName pour tout IDE basé sur Visual Studio, qui devrait faire l'affaire.

0
Soundararajan

From http://www.helixoft.com/blog/archives/32 définit le titre sur le nom de fichier actuel. Il fonctionne également sur 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
Carlo V. Dango

Pour être honnête, je ne suis pas sûr de bien comprendre votre question, mais j'en avais posé une ici sur SO qui semble concerner un problème similaire:

Travailler avec différentes versions/branches de la même solution Visual Studio 2005

0
js.