技术开发 频道

Ankh菜单删除


【IT168技术文档】

  今天下载了AnkhSVN 试用来一番。它是一个Visual Studio IDE的一个插件,感觉仍然不如VSS或者Visual SVN方便,Unintall后,居然发现VS2005菜单上,仍然有AnkhSVN的菜单项目。
1: Imports System 2: Imports EnvDTE 3: Imports System.Diagnostics 4: ' Comment the following line if you're running the macro in Visual Studio .NET 2003. 5: Imports Microsoft.VisualStudio.CommandBars 6: Imports Microsoft.Office.Core 7: 8: Public Module RemoveAnkhMenus 9: Public Sub RemoveAnkhMenus() 10: DeleteAnkhCommandControls() 11: DeleteAnkhCommands() 12: End Sub 13: 14: Private Sub DeleteAnkhCommandControls() 15: For Each bar As CommandBar In CType(DTE.CommandBars, CommandBars) 16: ' Debug.WriteLine(String.Format("Processing : {0}", GetPath(bar))) 17: 18: RecurseCommandControls(bar.Controls) 19: Next 20: End Sub 21: 22: Private Sub RecurseCommandControls(ByVal controls As CommandBarControls) 23: For Each control As CommandBarControl In controls 24: ' Debug.WriteLine(String.Format("Processing : {0}", GetPath(control))) 25: 26: ' Recurse childs. 27: If control.accChildCount > 0 Then 28: If control.Type = MsoControlType.msoControlPopup Then 29: RecurseCommandControls(CType(control, CommandBarPopup).Controls) 30: End If 31: End If 32: 33: ' Delete the control if it is related to AnkhSVN. 34: DeleteAnkhCommandControl(control) 35: Next 36: End Sub 37: 38: Private Sub DeleteAnkhCommandControl(ByVal control As CommandBarControl) 39: ' Delete control if it is related to AnkhSVN. 40: If control.Caption.StartsWith("Ankh") Then 41: Debug.WriteLine(String.Format("Deleting control: {0}", GetPath(control))) 42: control.Delete() 43: End If 44: End Sub 45: 46: Private Sub DeleteAnkhCommands() 47: ' Delete all commands related to AnkhSVN. 48: For Each command As Command In DTE.Commands 49: If command.Name <> Nothing Then 50: If command.Name.StartsWith("Ankh") Then 51: Debug.WriteLine(String.Format("Deleting command: {0}", command.Name)) 52: command.Delete() 53: End If 54: End If 55: Next 56: End Sub 57: 58: Private Function GetPath(ByVal control As Object) As String 59: If TypeOf (control) Is CommandBarControl Then 60: Dim cbc As CommandBarControl 61: cbc = CType(control, CommandBarControl) 62: 63: Return GetPath(cbc.Parent) + "->" + cbc.Caption 64: End If 65: 66: If TypeOf (control) Is CommandBar Then 67: Dim cb As CommandBar 68: cb = CType(control, CommandBar) 69: 70: Return GetPath(cb.Parent) + "->" + cb.Name 71: End If 72: 73: Return "DTE" 74: End Function 75: End Module
  这个宏文件必须在VS 的宏IDE中打开,直接保存为VBS项目运行必会报错的(谁试运行了不报错的可要留言)。 

  这个宏文件必须在VS 的宏IDE中打开,直接保存为VBS项目运行必会报错的(谁试运行了不报错的可要留言)。

你可以把它添加到任意一个宏项目或新建一个宏项目,然后运行之即可。需要注意的是,这个宏会运行很久,在我的T42上估计用了大约10多分钟。你可以把它添加到任意一个宏项目或新建一个宏项目,然后运行之即可。需要注意的是,这个宏会运行很久,在我的T42上估计用了大约10多分钟。
0
相关文章