【工作经历:阿里巴巴搜索技术研发中心QA ,百度新产品测试部QA】 【领域:测试分析,自动化测试,性能测试,安全测试 】 【个人定位:高级测试工程师+培训师+领域产品专家】

操纵遨游工具栏的方法,解决spy++无法捕获控件的问题(2)

上一篇 / 下一篇  2008-07-31 17:48:06 / 个人分类:自动化测试

利用微软内部工具 mitaspy可以发现msaa对象。这说明,mita比maui要强。mita也是微软以后的标准。

同时发现了FindWindowEx只能搜索子窗口,不能搜索孙子窗口,所以,需要提前注意窗口的嵌套层次。
这个问题完结了。我也不研究了。继续其他学习

更新后的代码


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Runtime.InteropServices;
using Accessibility;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int hWnd = FindWindowEx(0, 0, "Maxthon2_Frame", null);
            int sub = FindWindowEx(hWnd, 0, "XTPDockBar", null);
            int subhwnd = FindWindowEx(sub, 0, null, "标准工具栏");
            if (subhwnd!= null)
                Console.WriteLine("OK, Found the toolbar");
            msaa((IntPtr)subhwnd);

            Console.ReadKey();
        }

        [DllImport("oleacc", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
        public static extern int AccessibleChildren(IAccessible paccContainer, int iChildStart, int cChildren, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] object[] rgvarChildren, ref int pcObtained);

        [DllImport("oleacc.dll")]
        internal static extern int AccessibleObjectFromWindow(
                      IntPtr hwnd,
                      uint id,
                      ref Guid iid,
                      [In, Out, MarshalAs(UnmanagedType.IUnknown)] ref object ppvObject);

        internal enum OBJID : uint
        {
            WINDOW = 0x00000000,
            SYSMENU = 0xFFFFFFFF,
            TITLEBAR = 0xFFFFFFFE,
            MENU = 0xFFFFFFFD,
            CLIENT = 0xFFFFFFFC,
            VSCROLL = 0xFFFFFFFB,
            HSCROLL = 0xFFFFFFFA,
            SIZEGRIP = 0xFFFFFFF9,
            CARET = 0xFFFFFFF8,
            CURSOR = 0xFFFFFFF7,
            ALERT = 0xFFFFFFF6,
            SOUND = 0xFFFFFFF5,
        }

        [DllImport("user32.dll")]
        public static extern int FindWindowEx(int hwndParent, int hwndChildAfter,
            string lpszClass, string lpszWindow);

        public static void msaa(IntPtr hwnd2)
        {
            object ōbj = new object();
            Guid guid = new Guid("{618736E0-3C3D-11CF-810C-00AA00389B71}");
            AccessibleObjectFromWindow(hwnd2, (uint)OBJID.WINDOW, ref guid, ref obj);
            IAccessible accessible = obj as IAccessible;
            accessible = accessible as IAccessible;
            Object[] childs = new Object[accessible.accChildCount];
            int ōbtained = 0;
            try
            {
                AccessibleChildren(accessible, 0, accessible.accChildCount, childs, ref obtained);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.WriteLine(accessible.accChildCount);
            Console.WriteLine(obtained.ToString());

            for (int i = 0; i < obtained; i++)
            {
                IAccessible child = childs[i] as IAccessible;
                Console.WriteLine(child.get_accName(0));                
                Object[] accchilds = new Object[child.accChildCount];
                int result = 0;
                AccessibleChildren(child, 0, child.accChildCount , accchilds, ref result);
                for (int j = 0; j < result; j++)
                {
                    IAccessible jchild = accchilds[j] as IAccessible;
                    Console.WriteLine(jchild.get_accName(0));     
                }
            }
        }
    }
}






TAG: 自动化测试

 

评分:0

我来说两句

Open Toolbar