ArcObjectsで作成したツールバーをインストール時にデフォルトで表示状態にする方法

      2017/11/22

ESRI .NET Integration Frameworkを使うとボタンやツール,ツールバーなどが大変楽に作成できますが,デフォルトではレジストリ登録だけではツールバーが表示される状態にはなりません。これをインストール時点でツールバーが表示される状態にする方法が簡単に設定できます。

実際にはComponent Categoryにレジストリ登録する際の記述が必要ですが,BaseToolbarを作成した後に,

Visual Studio 2005 > Add Component Category を開き,"ArcMap Command Bar"

を選択して"PremierToolbar"をTrueに設定すればOK。この設定で自動的にComponent Categoryに登録する際のコードを追記してくれます。実際にはRegionで隠れている部分を展開すると追加されたコードを確認することができます。

#Region "ArcGIS Component Category Registrar generated code"
''' <summary>
''' Required method for ArcGIS Component Category registration -
''' Do not modify the contents of this method with the code editor.
''' </summary>
Private Shared Sub ArcGISCategoryRegistration(ByVal registerType As Type)
Dim regKey As String = String.Format("HKEY_CLASSES_ROOT\CLSID\{{{0}}}", registerType.GUID)
MxCommandBars.Register(regKey)

MxCommandBars_PremierToolbar(True, registerType)

End Sub
''' <summary>
''' Required method for ArcGIS Component Category unregistration -
''' Do not modify the contents of this method with the code editor.
''' </summary>
Private Shared Sub ArcGISCategoryUnregistration(ByVal registerType As Type)
Dim regKey As String = String.Format("HKEY_CLASSES_ROOT\CLSID\{{{0}}}", registerType.GUID)
MxCommandBars.Unregister(regKey)

MxCommandBars_PremierToolbar(False, registerType)

End Sub

''' <summary>
''' Required MxCommandBars Premier Toolbar registration method -
''' Do not modify the contents of this method with the code editor.
''' </summary>
Private Shared Sub MxCommandBars_PremierToolbar(ByVal reg As Boolean, ByVal t As Type)
If reg Then
Dim settingsKey As Microsoft.Win32.RegistryKey
settingsKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\ESRI", True)
If Not settingsKey Is Nothing Then
Dim premierKey As Microsoft.Win32.RegistryKey
premierKey = settingsKey.CreateSubKey("ArcMap\Settings\PremierToolbar\{" + t.GUID.ToString() + "}")
premierKey.Close()
settingsKey.Close()
End If
Else
Dim toolbarKey As Microsoft.Win32.RegistryKey
toolbarKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\ESRI\ArcMap\Settings\PremierToolbar\{" + t.GUID.ToString() + "}", True)
If Not toolbarKey Is Nothing Then
toolbarKey.DeleteSubKey(String.Empty)
toolbarKey.Close()
End If
End If
End Sub

2008-08-14追記
ただし,このツールには不具合があり,自動生成されるコードに誤りがあるため正常に動作しません。そのため,手動で以下のコードを修正する必要があります("s"を追記)。ArcGIS 9.2 SP5でも修正されていませんが,9.3では修正されるらしいです。

.....
premierKey = settingsKey.CreateSubKey("ArcMap\Settings\PremierToolbars\{" + t.GUID.ToString() + "}")
.....
toolbarKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\ESRI\ArcMap\Settings\PremierToolbars\{" + t.GUID.ToString() + "}", True)

 - GIS