[Mwinapi-commits] SF.net SVN: mwinapi:[122] trunk/ManagedWinapi/Accessibility/ AccessibleObjectList
Status: Beta
Brought to you by:
schierlm
From: <zi...@us...> - 2014-11-25 17:35:40
|
Revision: 122 http://sourceforge.net/p/mwinapi/code/122 Author: ziewer Date: 2014-11-25 17:35:37 +0000 (Tue, 25 Nov 2014) Log Message: ----------- Improved AccessibleEventListener.GetAccessibleObject(): Return parent or window on failure IAccessible implementation of object and/or child is missing. This avoids exceptions for HTML content in Internet Explorer Modified Paths: -------------- trunk/ManagedWinapi/Accessibility/AccessibleObjectListener.cs Modified: trunk/ManagedWinapi/Accessibility/AccessibleObjectListener.cs =================================================================== --- trunk/ManagedWinapi/Accessibility/AccessibleObjectListener.cs 2014-11-25 15:49:44 UTC (rev 121) +++ trunk/ManagedWinapi/Accessibility/AccessibleObjectListener.cs 2014-11-25 17:35:37 UTC (rev 122) @@ -161,6 +161,18 @@ IAccessible iacc; object child; uint result = AccessibleObjectFromEvent(e.HWnd, e.ObjectID, e.ChildID, out iacc, out child); + + // Note: AccessibleObjectFromEvent() sometimes fails due to missing IAccessible implementation of object and/or child + // This often happens for HTML content in Internet Explorer (e.g. for any <DIV> w/o 'role' attribute set). + // Try again without using ChildID and/or ObjectID, + // i.e. ChildID==0 will return the parent object; ObjectID==0 will return the parent window + if (result != 0 && e.ChildID != 0) + // second chance: try to receive object instead of child + result = AccessibleObjectFromEvent(e.HWnd, e.ObjectID, 0, out iacc, out child); + if (result != 0) + // third chance: try to receive window instead of object or child + result = AccessibleObjectFromEvent(e.HWnd, 0, 0, out iacc, out child); + if (result != 0) throw new Exception("AccessibleObjectFromPoint returned " + result); return new SystemAccessibleObject(iacc, (int)child); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |