51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3531|回复: 7
打印 上一主题 下一主题

[资料] 解决了自己的一个难题,希望能帮助到各位!!!枚举窗体

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2009-5-21 16:57:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
自己遇到的难题: 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.
我已经试了试,效果不错.
很多好内容都被老外掌握,各位要加油啊
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2009-5-21 17:16:28 | 只看该作者
枚举窗口和子窗口本来就是windows的API..
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2009-5-22 09:05:44 | 只看该作者
原帖由 mythxhg 于 2009-5-21 17:16 发表
枚举窗口和子窗口本来就是windows的API..

哥们 ,你没看我转的帖子吧.看了再说.
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2009-5-22 10:35:38 | 只看该作者
看过了,不就是枚举窗口,然后利用其窗口句柄或者窗口标题,文本长度和类名,然后判断一下..'

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

我不是用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调用.
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2009-5-22 10:54:16 | 只看该作者
都是高手
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2009-5-22 12:35:05 | 只看该作者
原帖由 mythxhg 于 2009-5-22 10:35 发表
看过了,不就是枚举窗口,然后利用其窗口句柄或者窗口标题,文本长度和类名,然后判断一下..'

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

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


看来你确实没弄明白, 我写这个帖子的目的就是告诉大家: 不用写dll ,也能利用QTP已有的object处理问题
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2009-5-22 16:24:06 | 只看该作者

回复 6# 的帖子

不好意思,失礼了,本人比较愚笨,的确没有理解你的最终目的

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

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

利用Desctop object和Description object,再调用ChildrenObject,  具体是怎么用呢,能不能解说一下...
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2009-5-22 16:47:23 | 只看该作者
51上前几年就贴出过类似的方法了,LZ可以在搜索中全文搜索 Desktop ChildObject。
可别盲目崇拜老外哦~~
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-23 05:26 , Processed in 0.070556 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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