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>
?
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!");
}
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/
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.
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.
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.
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.
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.
il existe une propriété nommée AppName pour tout IDE basé sur Visual Studio, qui devrait faire l'affaire.
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
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