51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4895|回复: 1
打印 上一主题 下一主题

[原创] msaa调用问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-7-31 11:35:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面是我使用c#代码,捕获aa的例子。结果一直是捕获不出来,大家可否指点一下,是什么原因。
这个例子是参考别人的写的。用来获取遨游浏览器的标准工具栏里的按钮。

问题
1、        IntPtr hwnd2 = FindWindowEx(hWnd, IntPtr.Zero, "XTPToolBar", "标准工具栏");
这个函数返回了空值。不明白为什么。遨游浏览器里有很多的XTPToolBar,所以我才加入了标题。

2、        我尝试了其他的控件,比如火狐浏览器的控件。
在找到子窗口对应的aa后,调用
            AccessibleChildren(accessible, 0, accessible.accChildCount - 1, childs, out obtained);
竟然不能得到他们的子对象。即使父对象里显示有多个子对象。得到的childs是空的数组。


public static void msaa()
        {
            object obj = new object();
            IntPtr hWnd = FindWindowEx(IntPtr.Zero, IntPtr.Zero, "Maxthon2_Frame", null);//get the parent hwnd
            IntPtr hwnd2 = FindWindowEx(hWnd, IntPtr.Zero, "XTPToolBar", "标准工具栏");            //get the sub window
            Guid guid = new Guid("{618736E0-3C3D-11CF-810C-00AA00389B71}");
            AccessibleObjectFromWindow(hwnd2, 0x00000000, ref guid, ref obj);//get the aa object
            IAccessible accessible = obj as IAccessible;
            accessible = accessible.accParent as IAccessible;//get the parent aa object
            Object[] childs = new Object[accessible.accChildCount];  //set a array to receive the sub aa object list
            int obtained = 0;
            AccessibleChildren(accessible, 0, accessible.accChildCount - 1, childs, out obtained);//get  the sub aa objects
            Console.WriteLine(obtained.ToString());//print count to verify the result
//print relative information ,not very importent .
            for (int i = 0; i < obtained; i++)
            {
                IAccessible child = childs as IAccessible;
                try { Console.WriteLine(child.get_accName(0)); }
                catch { }
                Object[] accchilds = new Object[child.accChildCount];
                int result = 0;
                AccessibleChildren(child, 0, child.accChildCount - 1, accchilds, out result);
                for (int j = 0; j < result; j++)
                {
                    IAccessible jchild = accchilds[j] as IAccessible;
                    Console.WriteLine(jchild.get_accName(0));
                }
            }
            Console.ReadLine();
        }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2008-8-6 15:45:50 | 只看该作者
问题已经解决。
我的api定义有问题
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-15 01:10 , Processed in 0.074312 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表