web-dev-qa-db-ja.com

Visual Studioのタイトルバーテキストを変更する方法

私たちは同じコードのいくつかの異なるブランチに取り組んでおり、2つのブランチを同時に扱うと、混乱して時間を浪費する可能性があります。

現在、VSのタイトルバーには<solution-name> - Visual Studio

そのテキストを作成する拡張機能を書くことは可能ですか<solution-name>: <branch-name> - <Visual Studio>

60
ProfK

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!");            
}
3
ProfK

助けることができる小さなVisual Studio拡張機能を作成しました: http://visualstudiogallery.msdn.Microsoft.com/f3f23845-5b1e-4811-882f-60b7181fa6d6

この小さな拡張機能は、Visual Studioの2つのインスタンスが実行されていることを検出し、Visual Studioのウィンドウタイトルを変更して、ソリューションの親フォルダー名を含めます。したがって、SolutionFolder-Microsoft Visual StudioSolutionFolderParent\SolutionFolder-Microsoft Visual Studioに変更されます。

これは、ソリューションをブランチするときに特に役立ちます。両方が同じソリューション名を持つ場合、どのブランチに取り組んでいるかを簡単に識別できるようになります。

ここの公式ページ: http://erwinmayer.com/labs/visual-studio-2010-extension-rename-visual-studio-window-title/

56
Erwin Mayer

VSCommands 2010 Lite の最新リリースを確認してください。これは、Friendly Solution Nameと呼ばれる機能を導入しました。これにより、正規表現パターンを設定して、フォルダー構造からブランチ名を抽出し、Visual Studioのメインウィンドウのタイトルに配置できます。詳細: http://vscommands.com/releasenotes/3.6.8. および http://vscommands.com/releasenotes/3.6.9.

MSDNダウンロードページ

18
Registered User

式として定義してVisual Studioのタイトルバーを変更するもう1つの拡張: http://visualstudiogallery.msdn.Microsoft.com/2e8ebfe4-023f-4c4d-9b7a-d05bbc5cb239

「タイトル式」を使用する設定により、このプラグインは非常に柔軟になります。

1
pasztorpisti

ソリューションファイルをターゲットとする別の名前のシンボリックリンクを追加しました。シンボリックリンクでソリューションを開くと、ウィンドウのタイトルにシンボリックリンク名が表示されます。

Windowsの場合:mklink BlawBranch.sln Blaw.sln

編集:ターゲットの.slnファイルがソースコントロールによって更新されると、ハードリンクが壊れることがわかりました。シンボリックリンクにも同じ問題はありません。

1
conical

2012年には、System.Windows.Application.Current.MainWindow.Titleこれを機能させるために。これにより、TaskBarItemタイトルとMainWindowタイトルの両方が更新されます。

これはメインスレッドからのみ可能であり、タイトルはVisual Studioによってさまざまな時点で更新されるため、いくつかのイベントに接続して、希望するものにリセットする必要があります(私のアドインでは、EnvDTE.SolutionEventsなど)。

お役に立てれば。

0
kata

多分もっと簡単な解決策は仮想デスクトップを使うことでしょうか?空間配置は覚えやすく、関連するウィンドウを対応するVSでグループ化でき、切り替えがより簡単になります。

0
Eevee

トリックを実行する必要のあるビジュアルスタジオベースのIDEには、AppNameという名前のプロパティがあります。

0
Soundararajan

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
0
Carlo V. Dango

正直なところ、あなたの質問を正しく理解しているかどうかはわかりませんが、SOで同様の問題についてのようです。

同じVisual Studio 2005ソリューションの異なるバージョン/ブランチでの作業

0
js.