none
IDEのオプション変更 RRS feed

  • 質問

  • お世話になっています。

    VisualStudioのIDEの設定はプログラムから変更できるのでしょうか?

    例 [ツール]→[オプション]→[環境]→[フォントおよび色]→フォントをMSゴシックからメイリオに変更

    EnvDTEを確認しましたが、メニュー項目に対する追加・変更・削除はできますが、その先のフォーム設定情報を取得する方法がわかりませんでした。

    ご存知のかたがいましたらご教授ください。

    2015年5月15日 15:04

回答

  • DTE.Propertiesから辿っていくと変更でいます。
    VS2010のマクロだとこんな感じ

    Sub TestMacro()
        Dim reg As Microsoft.Win32.RegistryKey
        Dim regCate As Microsoft.Win32.RegistryKey
        Try
            Dim w As Window = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput)
            w.Activate()
            Dim ow As OutputWindow = CType(w.Object, OutputWindow)
            Dim op As OutputWindowPane 'IDEの出力ウィンドウの出力先
            For Each pane As EnvDTE.OutputWindowPane In ow.OutputWindowPanes
                If (pane.Name = "Macro Debug") Then
                    op = pane
                    Exit For
                End If
            Next
            If op Is Nothing Then
                op = ow.OutputWindowPanes.Add("Macro Debug")
                op.Activate()
                op.Clear()
            End If
    
            reg = Microsoft.Win32.Registry.CurrentUser.OpenSubKey _
                    ("SOFTWARE\Microsoft\VisualStudio\10.0_Config\AutomationProperties", False)
            For Each category As String In reg.GetSubKeyNames()
                regCate = reg.OpenSubKey(category)
                Try
                    For Each page As String In regCate.GetSubKeyNames()
                        Try
                            For Each p As EnvDTE.Property In DTE.Properties(category, page)
                                Dim s As String = String.Format("Category={0}" + vbTab + "Page={1}" + vbTab + "Name={2}" + vbTab + "Value={3}" + vbCrLf _
                                                                , category, page, p.Name, p.Value)
                                op.OutputString(s)
                            Next
                        Catch ex1 As Exception
                            Dim er As String = String.Format("Category={0}" + vbTab + "Page={1}" + vbTab + "ERR={2}" + vbCrLf _
                                                                , category, page, ex1.Message)
                            op.OutputString(er)
                        End Try
                    Next
                Finally
                    regCate.Close()
                End Try
            Next
    
            'フォントをメイリオに変更
            DTE.Properties("FontsAndColors", "TextEditor").Item("FontFamily").Value = "Meiryo UI"
        Catch ex As Exception
            MsgBox(ex.Message)
        Finally
            If (reg IsNot Nothing) Then
                reg.Close()
            End If
        End Try
    End Sub
    オプション設定の制御をとオプション ページにあるプロパティ項目名の確認に説明があります

    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク しん11111111 2015年5月16日 10:47
    • 回答としてマークされていない しん11111111 2015年5月16日 16:10
    • 回答としてマーク しん11111111 2015年5月16日 16:10
    • 回答としてマークされていない しん11111111 2015年5月16日 16:10
    • 回答としてマーク しん11111111 2015年5月16日 16:12
    • 回答としてマークされていない しん11111111 2015年5月16日 16:12
    • 回答としてマーク 星 睦美 2015年5月18日 0:55
    2015年5月16日 1:37

すべての返信

  • DTE.Propertiesから辿っていくと変更でいます。
    VS2010のマクロだとこんな感じ

    Sub TestMacro()
        Dim reg As Microsoft.Win32.RegistryKey
        Dim regCate As Microsoft.Win32.RegistryKey
        Try
            Dim w As Window = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput)
            w.Activate()
            Dim ow As OutputWindow = CType(w.Object, OutputWindow)
            Dim op As OutputWindowPane 'IDEの出力ウィンドウの出力先
            For Each pane As EnvDTE.OutputWindowPane In ow.OutputWindowPanes
                If (pane.Name = "Macro Debug") Then
                    op = pane
                    Exit For
                End If
            Next
            If op Is Nothing Then
                op = ow.OutputWindowPanes.Add("Macro Debug")
                op.Activate()
                op.Clear()
            End If
    
            reg = Microsoft.Win32.Registry.CurrentUser.OpenSubKey _
                    ("SOFTWARE\Microsoft\VisualStudio\10.0_Config\AutomationProperties", False)
            For Each category As String In reg.GetSubKeyNames()
                regCate = reg.OpenSubKey(category)
                Try
                    For Each page As String In regCate.GetSubKeyNames()
                        Try
                            For Each p As EnvDTE.Property In DTE.Properties(category, page)
                                Dim s As String = String.Format("Category={0}" + vbTab + "Page={1}" + vbTab + "Name={2}" + vbTab + "Value={3}" + vbCrLf _
                                                                , category, page, p.Name, p.Value)
                                op.OutputString(s)
                            Next
                        Catch ex1 As Exception
                            Dim er As String = String.Format("Category={0}" + vbTab + "Page={1}" + vbTab + "ERR={2}" + vbCrLf _
                                                                , category, page, ex1.Message)
                            op.OutputString(er)
                        End Try
                    Next
                Finally
                    regCate.Close()
                End Try
            Next
    
            'フォントをメイリオに変更
            DTE.Properties("FontsAndColors", "TextEditor").Item("FontFamily").Value = "Meiryo UI"
        Catch ex As Exception
            MsgBox(ex.Message)
        Finally
            If (reg IsNot Nothing) Then
                reg.Close()
            End If
        End Try
    End Sub
    オプション設定の制御をとオプション ページにあるプロパティ項目名の確認に説明があります

    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク しん11111111 2015年5月16日 10:47
    • 回答としてマークされていない しん11111111 2015年5月16日 16:10
    • 回答としてマーク しん11111111 2015年5月16日 16:10
    • 回答としてマークされていない しん11111111 2015年5月16日 16:10
    • 回答としてマーク しん11111111 2015年5月16日 16:12
    • 回答としてマークされていない しん11111111 2015年5月16日 16:12
    • 回答としてマーク 星 睦美 2015年5月18日 0:55
    2015年5月16日 1:37
  • まさに求めていた情報です、ありがとうございました!

    2015年5月16日 10:34