private static bool DeepEquals(IAccessible ia1, IAccessible ia2)
 {
     if (ia1.Equals(ia2)) return true;
     if (Marshal.GetIUnknownForObject(ia1) == Marshal.GetIUnknownForObject(ia2)) return true;
     try
     {
         if (ia1.accChildCount != ia2.accChildCount) return false;
         SystemAccessibleObject sa1 = new SystemAccessibleObject(ia1, 0);
         SystemAccessibleObject sa2 = new SystemAccessibleObject(ia2, 0);
         if (sa1.Window.HWnd != sa2.Window.HWnd) return false;
         if (sa1.Location != sa2.Location) return false;
         if (sa1.DefaultAction != sa2.DefaultAction) return false;
         if (sa1.Description != sa2.Description) return false;
         if (sa1.KeyboardShortcut != sa2.KeyboardShortcut) return false;
         if (sa1.Name != sa2.Name) return false;
         if (!sa1.Role.Equals(sa2.Role)) return false;
         if (sa1.State != sa2.State) return false;
         if (sa1.Value != sa2.Value) return false;
         if (sa1.Visible != sa2.Visible) return false;
         if (ia1.accParent == null && ia2.accParent == null) return true;
         if (ia1.accParent == null || ia2.accParent == null) return false;
     }
     catch (COMException)
     {
         return false;
     }
     bool de = DeepEquals((IAccessible)ia1.accParent, (IAccessible)ia2.accParent);
     return de;
 }
        private static bool DeepEquals(IAccessible ia1, IAccessible ia2)
        {
            if (ia1.Equals(ia2))
            {
                return(true);
            }
            if (Marshal.GetIUnknownForObject(ia1) == Marshal.GetIUnknownForObject(ia2))
            {
                return(true);
            }
            if (ia1.accChildCount != ia2.accChildCount)
            {
                return(false);
            }
            SystemAccessibleObject sa1 = new SystemAccessibleObject(ia1, 0);
            SystemAccessibleObject sa2 = new SystemAccessibleObject(ia2, 0);

            if (sa1.Window.HWnd != sa2.Window.HWnd)
            {
                return(false);
            }
            if (sa1.Location != sa2.Location)
            {
                return(false);
            }
            if (sa1.DefaultAction != sa2.DefaultAction)
            {
                return(false);
            }
            if (sa1.Description != sa2.Description)
            {
                return(false);
            }
            if (sa1.KeyboardShortcut != sa2.KeyboardShortcut)
            {
                return(false);
            }
            if (sa1.Name != sa2.Name)
            {
                return(false);
            }
            if (!sa1.Role.Equals(sa2.Role))
            {
                return(false);
            }
            if (sa1.State != sa2.State)
            {
                return(false);
            }
            if (sa1.Value != sa2.Value)
            {
                return(false);
            }
            if (sa1.Visible != sa2.Visible)
            {
                return(false);
            }
            if (ia1.accParent == null && ia2.accParent == null)
            {
                return(true);
            }
            if (ia1.accParent == null || ia2.accParent == null)
            {
                return(false);
            }
            bool de = DeepEquals((IAccessible)ia1.accParent, (IAccessible)ia2.accParent);

            return(de);
        }