[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.
|