51Testing软件测试论坛

标题: 解决了自己的一个难题,希望能帮助到各位!!!枚举窗体 [打印本页]

作者: iov_cp    时间: 2009-5-21 16:57
标题: 解决了自己的一个难题,希望能帮助到各位!!!枚举窗体
自己遇到的难题: http://bbs.51testing.com/thread-149245-1-2.html
可能有些朋友迟早也会遇到 1. 大量同名window 2. 想要enumerate桌面上所有的window的问题
我自己也是这样,找不到资料就想,能不能调用API的EnumerateWindows来处理呢,然后用google一搜,发现其实一切都很简单
http://www.sqaforums.com/showfla ... c=1&Search=true
利用Desctop object和Description object,再调用ChildrenObject.
我已经试了试,效果不错.
很多好内容都被老外掌握,各位要加油啊
作者: mythxhg    时间: 2009-5-21 17:16
枚举窗口和子窗口本来就是windows的API..
作者: iov_cp    时间: 2009-5-22 09:05
原帖由 mythxhg 于 2009-5-21 17:16 发表
枚举窗口和子窗口本来就是windows的API..

哥们 ,你没看我转的帖子吧.看了再说.
作者: mythxhg    时间: 2009-5-22 10:35
看过了,不就是枚举窗口,然后利用其窗口句柄或者窗口标题,文本长度和类名,然后判断一下..'

不过不知道你做这些的主要目的是什么.

我不是用VBS写,但用VC倒是写过
BOOL CALLBACK FindFunc(HWND hwnd,LPARAM lParam)
{
        char szName[255];
        char szText[255];
        ::GetClassName(hwnd,szName,255);
        ::GetWindowText(hwnd,szText,255);
        if((strcmp(szName,g_szClassName.GetBuffer(0)) == 0)&&(strcmp(szText,g_szCaption.GetBuffer(0)) == 0))
        {
                if (g_dwProcessID != NULL)
                {
                        DWORD PID;
                        DWORD tid = GetWindowThreadProcessId(hwnd, &PID);
                        if (PID == g_dwProcessID)
                        {
                                g_FindHandle = hwnd;
                                return false;
                        }else
                        {
                                return true;
                        }
                }else
                {
                        g_FindHandle = hwnd;
                        return false;
                }
        }
        return true;
}

调用
::EnumWindows(FindFunc,0);
::EnumChildWindows((HWND)hWnd,FindFunc,0); //枚举hWnd句柄指向的窗口下的所有子窗口
当然,我不使用QTP去引用系统的API,我把API写到DLL里给VBS调用.
作者: dreamever    时间: 2009-5-22 10:54
都是高手
作者: iov_cp    时间: 2009-5-22 12:35
原帖由 mythxhg 于 2009-5-22 10:35 发表
看过了,不就是枚举窗口,然后利用其窗口句柄或者窗口标题,文本长度和类名,然后判断一下..'

不过不知道你做这些的主要目的是什么.

我不是用VBS写,但用VC倒是写过
BOOL CALLBACK FindFunc(HWND hwnd,LPARAM lPar ...


看来你确实没弄明白, 我写这个帖子的目的就是告诉大家: 不用写dll ,也能利用QTP已有的object处理问题
作者: mythxhg    时间: 2009-5-22 16:24
标题: 回复 6# 的帖子
不好意思,失礼了,本人比较愚笨,的确没有理解你的最终目的

不过PS一下,你哪个转帖的确说的只是用QTP调用API而已啊,没有你说的"利用QTP已有的object处理问题"

我的确没用过QTP自身的函数来处理这些窗口问题,你既然上了帖子,还望可以详细说一下这方面的知识啊,谢谢,多交流啊

利用Desctop object和Description object,再调用ChildrenObject,  具体是怎么用呢,能不能解说一下...
作者: hsjzfling    时间: 2009-5-22 16:47
51上前几年就贴出过类似的方法了,LZ可以在搜索中全文搜索 Desktop ChildObject。
可别盲目崇拜老外哦~~




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2