All my visual studio instances has the title "projectname - -Microsoft Visual Studio". Do you only have "Visual Studio"?
–
StefanFeb 23 '09 at 11:04

Ever think about changing the name of your solution after branching?
–
WillFeb 23 '09 at 11:16

@Stefan, mine has solutionname - Microsoft Visual Studio, but I want it to have solutionname - version+branch. I pretty much know it's Visual Studio.
–
ProfKFeb 23 '09 at 16:38

4

@Will, I am not in control of the branching, and the guy that is has reasons to not use multiple solution names.
–
ProfKFeb 23 '09 at 16:39

2

@Will - I often have multiple copies of the same solution checked out - it would be nice if this could be solved in a generic way to meet different needs - personally I'd like to show the path to the solution file
–
morechilliOct 9 '09 at 14:04

11 Answers
11

This small extension will detect
whenever two instances of Visual
Studio are running and change the
window title of Visual Studio to
include the parent folder name of the
solution. It will therefore change
SolutionFolder - Microsoft Visual Studio into
SolutionFolderParent\SolutionFolder - Microsoft Visual Studio.

This is particularly useful when
branching a solution: it becomes
possible to easily identify which
branch you are working on, in the case
where both would have the same
solution name.

Since this post, Erwin's updated this tool with options allowing for more control on what and when the title is updated. (For example, a single open solution can be renamed.) This is perfect without all the bloat of VS Commands 10. Thank you!
–
emraginsMay 28 '12 at 20:31

@Erwin Mayer - this is the best solution. I continually look back for this extension every new install. Simple, straightforward. A great asset to the community. Be sure, folks, that you check the directory-level naming options. I name mine with the second ancestor, for example.
–
maxwellbSep 17 '12 at 15:37

@maxwellb Thanks for your kind compliment. I am trying to make this extension work with VS 2012 but the current implementation only changes the title in the taskbar, not at the top of the Window. I suspect Microsoft is no longer using the standard window type so SetWindowText is not effective. If anyone has an idea to overcome this please let me know!
–
Erwin MayerSep 19 '12 at 6:33

Fantastic extension. I'm sure you'll have it updated by the time I move to 2012. :)
–
ShawnSep 21 '12 at 17:40

@Shawn Thanks! I am still struggling to find a way to modify the title. I tried the most recent EnvDTE interfaces but to no avail. I was able to locate the TitleBar that contains the Visual Studio title (the other TitleBar that is more standard is kind of "hidden" but still there, with no title set) but I cannot access it through the UI Automation Framework either. I am hitting dead ends on the VS SDK side, and the Win32 methods are only partially working. I keep crossing my fingers and welcome any suggestion.
–
Erwin MayerSep 21 '12 at 18:02

Trying to set MainWindow.Caption throws an exception. You have to use the Win32 SetWindowText function to change the title, but beware: Visual Studio resets the title bar text at the drop of a hat, so you should implement a Timer to keep setting your desired text. The following code from the Connect class of the add-in will permanently (or, as long as the add-in is running) keep the title bar text as "Hello World!"

That works at first, but when you edit your solution and Visual Studio rewrites the .sln file it deletes it before writing it, which severs the link and you end up losing edits because your source control system is unaware that you've made any changes. Been there, done that. :-)
–
RichieHindleOct 5 '12 at 9:28

@RichieHindle I made a change to the solution file in Visual Studio 2010 by adding a project, then close/saving the solution. The changes were made to the hardlink target and the link was not broken. Did you by by chance see the behavior you speak of in an earlier version of VS?
–
conicalNov 9 '12 at 1:17

I was using VS 2005, so hopefully it's been fixed since then.
–
RichieHindleNov 9 '12 at 15:18

Where is mklink.exe? I tried where mklink but got the error ' INFO: Could not find files for the given pattern(s).'
–
Colonel PanicFeb 22 '13 at 10:14

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

In 2012, you have to set System.Windows.Application.Current.MainWindow.Title in order for this to work. This will update both the TaskBarItem title and the MainWindow title.

This is only possible from the main thread and since the title will get updated at various points by Visual Studio, you have to hook up to some events and reset it to whatever you wanted it to be (in my AddIn, I use some EnvDTE.SolutionEvents among others).