私たちは同じコードのいくつかの異なるブランチに取り組んでおり、2つのブランチを同時に扱うと、混乱して時間を浪費する可能性があります。
現在、VSのタイトルバーには<solution-name> - Visual Studio
。
そのテキストを作成する拡張機能を書くことは可能ですか<solution-name>: <branch-name> - <Visual Studio>
?
MainWindow.Captionを設定しようとすると、例外がスローされます。タイトルを変更するにはWin32 SetWindowText関数を使用する必要がありますが、注意してください。VisualStudioは帽子のドロップでタイトルバーのテキストをリセットするため、タイマーを実装して必要なテキストを設定し続ける必要があります。アドインの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!");
}
助けることができる小さなVisual Studio拡張機能を作成しました: http://visualstudiogallery.msdn.Microsoft.com/f3f23845-5b1e-4811-882f-60b7181fa6d6
この小さな拡張機能は、Visual Studioの2つのインスタンスが実行されていることを検出し、Visual Studioのウィンドウタイトルを変更して、ソリューションの親フォルダー名を含めます。したがって、SolutionFolder-Microsoft Visual StudioはSolutionFolderParent\SolutionFolder-Microsoft Visual Studioに変更されます。
これは、ソリューションをブランチするときに特に役立ちます。両方が同じソリューション名を持つ場合、どのブランチに取り組んでいるかを簡単に識別できるようになります。
ここの公式ページ: http://erwinmayer.com/labs/visual-studio-2010-extension-rename-visual-studio-window-title/
VSCommands 2010 Lite の最新リリースを確認してください。これは、Friendly Solution Nameと呼ばれる機能を導入しました。これにより、正規表現パターンを設定して、フォルダー構造からブランチ名を抽出し、Visual Studioのメインウィンドウのタイトルに配置できます。詳細: http://vscommands.com/releasenotes/3.6.8. および http://vscommands.com/releasenotes/3.6.9.
式として定義してVisual Studioのタイトルバーを変更するもう1つの拡張: http://visualstudiogallery.msdn.Microsoft.com/2e8ebfe4-023f-4c4d-9b7a-d05bbc5cb239
「タイトル式」を使用する設定により、このプラグインは非常に柔軟になります。
ソリューションファイルをターゲットとする別の名前のシンボリックリンクを追加しました。シンボリックリンクでソリューションを開くと、ウィンドウのタイトルにシンボリックリンク名が表示されます。
Windowsの場合:mklink BlawBranch.sln Blaw.sln
編集:ターゲットの.slnファイルがソースコントロールによって更新されると、ハードリンクが壊れることがわかりました。シンボリックリンクにも同じ問題はありません。
2012年には、System.Windows.Application.Current.MainWindow.Title
これを機能させるために。これにより、TaskBarItemタイトルとMainWindowタイトルの両方が更新されます。
これはメインスレッドからのみ可能であり、タイトルはVisual Studioによってさまざまな時点で更新されるため、いくつかのイベントに接続して、希望するものにリセットする必要があります(私のアドインでは、EnvDTE.SolutionEvents
など)。
お役に立てれば。
多分もっと簡単な解決策は仮想デスクトップを使うことでしょうか?空間配置は覚えやすく、関連するウィンドウを対応するVSでグループ化でき、切り替えがより簡単になります。
トリックを実行する必要のあるビジュアルスタジオベースのIDEには、AppNameという名前のプロパティがあります。
From 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
正直なところ、あなたの質問を正しく理解しているかどうかはわかりませんが、SOで同様の問題についてのようです。