public static T GetChildWindowWithControlId <T>(this UIItem parent, int controlId, int timeout = 0) where T : UIItem { do { var pointer = IntPtr.Zero; Methods.EnumWindowProcedure childProc = (handle, arg) => { var cId = Methods.GetWindowLong(handle, -12); if (cId == controlId) { pointer = handle; return(false); } return(true); }; Methods.EnumChildWindows(parent.GetHWnd(), childProc, IntPtr.Zero); if (pointer != IntPtr.Zero) { var el = AutomationElement.FromHandle(pointer); return((T)Activator.CreateInstance(typeof(T), el, new ProcessActionListener(el))); } Thread.Sleep(200); timeout -= 200; } while (timeout > 0); return(null); }