iov_cp 发表于 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/showflat.php?Cat=&Board=UBB20&Number=463474&Searchpage=1&Main=463474&Words=&topic=1&Search=true
利用Desctop object和Description object,再调用ChildrenObject.
我已经试了试,效果不错.
很多好内容都被老外掌握,各位要加油啊

mythxhg 发表于 2009-5-21 17:16:28

枚举窗口和子窗口本来就是windows的API..

iov_cp 发表于 2009-5-22 09:05:44

原帖由 mythxhg 于 2009-5-21 17:16 发表 http://bbs.51testing.com/images/common/back.gif
枚举窗口和子窗口本来就是windows的API..
哥们 ,你没看我转的帖子吧.看了再说.

mythxhg 发表于 2009-5-22 10:35:38

看过了,不就是枚举窗口,然后利用其窗口句柄或者窗口标题,文本长度和类名,然后判断一下..'

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

我不是用VBS写,但用VC倒是写过
BOOL CALLBACK FindFunc(HWND hwnd,LPARAM lParam)
{
        char szName;
        char szText;
        ::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:16

都是高手

iov_cp 发表于 2009-5-22 12:35:05

原帖由 mythxhg 于 2009-5-22 10:35 发表 http://bbs.51testing.com/images/common/back.gif
看过了,不就是枚举窗口,然后利用其窗口句柄或者窗口标题,文本长度和类名,然后判断一下..'

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

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

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

mythxhg 发表于 2009-5-22 16:24:06

回复 6# 的帖子

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

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

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

利用Desctop object和Description object,再调用ChildrenObject,具体是怎么用呢,能不能解说一下...:handshake

hsjzfling 发表于 2009-5-22 16:47:23

51上前几年就贴出过类似的方法了,LZ可以在搜索中全文搜索 Desktop ChildObject。
可别盲目崇拜老外哦~~
页: [1]
查看完整版本: 解决了自己的一个难题,希望能帮助到各位!!!枚举窗体