51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4290|回复: 6
打印 上一主题 下一主题

大家进来讨论一下关于WINRUNNER使用WINDOWS API控制程序的问题.

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-11-19 16:23:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
不知道各位有没用WINRUNNER获取HANDLE后使用PostMessageA结合VC的SPY++来编写使用消息控制的自动化测试.
load_dll ("user32.dll");
extern int PostMessageA(in long, in long, in long, in long);
extern int BroadcastSystemMessage........
invoke_application("C:\\MoiSystem.exe","","",SW_SHOW);
win_get_info("MOIS","handle",hWnd);       
PostMessageA(hWnd, WM_CHAR, 00000041, C01E0001);

WINDOWS上运行的程序都是基于消息机制的,就是窗口有一个消息循环来等待接收消息并分发给下面处理.我们在用MFC写窗口程序的时候就经常用到SENDMESSAGE来通知和处理各种操作.我觉得程序代码里和WINRUNNER这里使用WIN API调用的原理是一样的.
所以理论上我觉得既然WINRUNNER能拿到具体的HANDLE,并且用SPY++能拿到发送的消息的具体内容,那么应该就能通过POSTMESSAGEA和WINDOWS 的其他API函数来发送控制指令实现对程序的控制,不过我试验后发现只有一些简单的CLOSE等消息可以响应,其他通过SPY++拿到的消息放到代码里运行发现很多是无效的.

希望大家分享一下这方面的经验.

[ 本帖最后由 mythxhg 于 2007-11-19 16:25 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2007-11-19 17:05:29 | 只看该作者
1.你想做出什么样的效果啊?
2.其实WQINDOWS平台上的自动化工具就是利用WINDOWS的消息机制实现的,所以说你上面的做法应该是可以的,估计是你的用法不对.
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2007-11-20 09:31:14 | 只看该作者
效果是就是对哪些OBJ类型的对象操作啊,因为WINRUNNER提供的一些函数可操作性比较低,所以打算用这种方式对付拿些比较难处理的OBJ类型的GUI对象.

听君一言胜读十年书,明白了WINDOWS自动化工具的工作原理了.
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2007-11-20 10:06:36 | 只看该作者
如果你没有 非常强的C++功底,我劝你不要自己开发底层函数,因为这么做非常的难.再说MI开发WR的开发人员都是专家,WR出来也有快20年了,如果可以被你简简单单的搞出来了,那他们还混什么啊?如果你想开发一些WR不支持的功能,到可以试试,但如果你想加强WR已有的功能,可以说相当的难,可能有时发一些简单的消息的做不了的,要涉及到HOOK,内存什么的,非常的复杂.如果想增强WR现有的函数,可以用WR本身来重写一下,倒不错!
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2007-11-21 11:18:21 | 只看该作者
虽然不强,但是功底还是有点,以前我是自己写代码遍历查找句柄和发送消息给窗口,不过后来发现WINRUNNER可以直接获取到对象的HANDLE,所以打算直接用WINRUNNER来获取HANDLE后调用外部的API来进行控制.这样省力省心.其实用MFC技术写过窗口程序的都知道WINDOWS下的无非就是消息.基本上窗口与外部的接口就是消息.钩子和内存等这些只是铅在其内部操作里面的,只要给到窗口消息,那窗口下的处理代码自然会响应该响应的动作,例如内存操作,HOOK就更不用说了.

当然也可能我自己比较天真,因为我自己写的代码自己明白要做什么才能控制到,如果是别人的程序,而且代码也没有的话我就没辄了,所以我只能用VC++的SPY++来看具体的消息内容.SPY++其实功能强大,基本上所有到达指定句柄的消息都可以显示出来,只是不知道我哪里用错。
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2008-8-20 18:05:19 | 只看该作者

支持一下,楼主这个想法实现的怎么了

WINRUNNER使用WINDOWS API控制程序的问题解决的怎么样了,不知道楼主能否分享一下
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2008-8-22 12:47:20 | 只看该作者
load_dll("user32.dll");

extern long IsWindowVisible(long);
extern long FindWindowA(string,string);
public function ni_win_wait_disapear(winClass,winName)
{

auto handle;
handle = FindWindowA(winClass,winName);

if(handle == 0) return 0;
else
{
  return 1;
}

}
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-15 00:46 , Processed in 0.073436 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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