IAccessible的实现是由开发者提供, 开发者可以灵活地根据实际情况决定方法的实现。比如前面提到了折线图控件可以返回坐标数列。对于.NET WinForm, 微软在Framework中就提供了IAccessible的默认实现,这样在具体实现中,就可以处理.NET动态维护HWND的细节。
可见这个接口主要是用于软件测试和实现特殊的UI需求所用的 , 了解到这个技术之后我就想QQ会不会也使用了这个技术实现软件的测试呢 ?
结果是肯定的 , QQ的GUI也使用了这个接口 , 所以我们可以通过这个接口获取QQ窗口内部的信息 , 而且信息很全面 , 好在.NET中已经封装好了这一接口使得这一编程过程变得比较容易 , IAccessible接口在Accessibility命名空间下
实现窗口信息的获取需要配合oleacc.dll中提供的API来进行操作 , 下面是使用到的主要的API函数名
1 public static extern int AccessibleChildren( 2IAccessible paccContainer, 3int iChildStart, 4int cChildren, 5[Out()] [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 4)] object[] rgvarChildren, 6ref int pcObtained); 7 8 internal static extern int AccessibleObjectFromWindow( 9IntPtr hwnd,10uint id,11ref Guid iid,12[In, Out, MarshalAs(UnmanagedType.IUnknown)] ref object ppvObject);13 14 public static extern uint WindowFromAccessibleObject(IAccessible pacc, ref IntPtr phwnd);
希望大家可以通过这篇文章了解到更多的关于IAccessible接口的知识
最后附一张DEMO图:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-49282-2.html
吴亦凡
到我们家门口来挑衅
实力超过日本海军