Message 1 of 8
Purge unused Via SendWait or AutomationElement
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Hello,
I am attempting to press the Purge Unused Ribbon button via SendWait or AutomationElement but am not having much luck. Following are my two attempts. Any assistance greatly appreciated.
<Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)> _
<Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)> _
<Autodesk.Revit.Attributes.Journaling(Autodesk.Revit.Attributes.JournalingMode.NoCommandData)> _
Public Class PurgeAllSendWaitCmd
Implements Autodesk.Revit.UI.IExternalCommand
<DllImport("USER32.DLL")>
Public Shared Function FindWindow(lpClassName As String, lpWindowName As String) As IntPtr
End Function
<DllImport("USER32.DLL")> _
Public Shared Function SetForegroundWindow(hWnd As IntPtr) As Boolean
End Function
Const _window_class_name_zero As String = "Afx:00400000:8:00010011:00000000:007B05A1"
Const _window_class_name_project_open As String = "Afx:00400000:8:00010011:00000000:007B05A1"
Public Function Execute(ByVal commandData As Autodesk.Revit.UI.ExternalCommandData, _
ByRef message As String, ByVal elements As Autodesk.Revit.DB.ElementSet) _
As Autodesk.Revit.UI.Result Implements Autodesk.Revit.UI.IExternalCommand.Execute
Try
Dim revitHandle As IntPtr = FindWindow(_window_class_name_project_open, Nothing)
If IntPtr.Zero = revitHandle Then
revitHandle = FindWindow(_window_class_name_zero, Nothing)
End If
If IntPtr.Zero = revitHandle Then
MsgBox("Unable to find Revit window." + " Is Revit Architecture up and running yet?")
Return 1
End If
SetForegroundWindow(revitHandle)
System.Threading.Thread.Sleep(1000)
SendKeys.SendWait("%GU")
Catch ex As Exception
MsgBox(ex.message)
End Try
End Function
End Class<Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)> _
<Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)> _
<Autodesk.Revit.Attributes.Journaling(Autodesk.Revit.Attributes.JournalingMode.NoCommandData)> _
Public Class RockitPurgeAllAutomationElementCmd
Implements Autodesk.Revit.UI.IExternalCommand
Public Function Execute(ByVal commandData As Autodesk.Revit.UI.ExternalCommandData, _
ByRef message As String, ByVal elements As Autodesk.Revit.DB.ElementSet) _
As Autodesk.Revit.UI.Result Implements Autodesk.Revit.UI.IExternalCommand.Execute
Try
Dim processes As Process() = Process.GetProcessesByName("Revit")
Dim objMainWindowHandle As AutomationElement = AutomationElement.FromHandle(processes(0).MainWindowHandle)
Dim nameRibbonCondition2 As New PropertyCondition(AutomationElement.NameProperty, "")
Dim typeRibbonCondition2 As New PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Pane)
Dim objAndCondition2 As New AndCondition(typeRibbonCondition2, nameRibbonCondition2)
Dim ribbonWnd2 As AutomationElement = objMainWindowHandle.FindFirst(TreeScope.Children, objAndCondition2)
'Dim aIDPanelCondition As New PropertyCondition(AutomationElement.AutomationIdProperty, "Modify")
Dim mainWndFromHandle As AutomationElement = objMainWindowHandle
' the revit window handle
Dim nameRibbonCondition As New PropertyCondition(AutomationElement.NameProperty, "RibbonHostWindow")
Dim typeRibbonCondition As New PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Pane)
Dim andCondition As New AndCondition(typeRibbonCondition, nameRibbonCondition)
Dim ribbonWnd As AutomationElement = mainWndFromHandle.FindFirst(TreeScope.Children, andCondition)
Dim aIDCondition As New PropertyCondition(AutomationElement.AutomationIdProperty, "Manage")
Dim addinbutton As AutomationElement = ribbonWnd.FindFirst(TreeScope.Children, aIDCondition)
' show addin panel by pressing the tab header
Dim invPattern As InvokePattern = TryCast(addinbutton.GetCurrentPattern(InvokePattern.Pattern), InvokePattern)
invPattern.Invoke()
' pause, so ribbon panels can re-arrange
System.Threading.Thread.Sleep(1000)
Dim aIDPanelCondition As New PropertyCondition(AutomationElement.AutomationIdProperty, "PurgeUnused")
Dim addinPanel As AutomationElement = ribbonWnd.FindFirst(TreeScope.Children, aIDPanelCondition)
'Dim aIDTestPanelCondition As New PropertyCondition(AutomationElement.AutomationIdProperty, "CustomCtrl_%ADD_INS_TAB%TestPanel")
'Dim testPanel As AutomationElement = addinPanel.FindFirst(TreeScope.Children, aIDTestPanelCondition)
'Dim aIDContainerCondition As New PropertyCondition(AutomationElement.AutomationIdProperty, "CustomCtrl_%CustomCtrl_%ADD_INS_TAB%TestPanel%TestButton_RibbonItemControl")
'Dim testContainer As AutomationElement = testPanel.FindFirst(TreeScope.Children, aIDContainerCondition)
'Dim aIDTestButtonCondition As New PropertyCondition(AutomationElement.AutomationIdProperty, "CustomCtrl_%CustomCtrl_%ADD_INS_TAB%TestPanel%TestButton")
'Dim testButton As AutomationElement = testContainer.FindFirst(TreeScope.Children, aIDTestButtonCondition)
'Dim invPatternButton As InvokePattern = TryCast(testButton.GetCurrentPattern(InvokePattern.Pattern), InvokePattern)
'invPatternButton.Invoke()
Catch ex As Exception
clsError.RockCADSupport_Exception(ex, , intPublicDebugPosition)
End Try
End Function
End Class
Kind Regards
David