You can always wrap it in a loop with a Sleep call
;~ Local $iCount = 0
; While we haven't found the next button
While Not IsObj($oButton4)
; Search for it
$oDesktop.FindFirst( $TreeScope_Descendants, $pCondition5, $pButton4 )
; Attempt to create the object
$oButton4 = ObjCreateInterface( $pButton4, $sIID_IUIAutomationElement, $dtag_IUIAutomationElement )
; If we found it (it's an object)
If IsObj( $oButton4 ) Then
ConsoleWrite( "$oButton4 OK" & @CRLF)
Else
; Wait a little before retrying so we don't kill the old computers
Sleep(500)
; Optionally, count the number of times this happens...
;~ $iCount += 1
; If it loops too many times, return an error
;~ If $iCount >= 10 Then Return SetError(1, 0, False)
EndIf
WEnd
Edit: And this works for finding a lot of things... I made this into a function to wait for elements/windows/etc to appear, cause I got bored...