51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 5536|回复: 19
打印 上一主题 下一主题

[求助] 来几个大龙虾看看,关于QTP调用WIN API的问题..

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-12-5 16:00:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
extern.Declare micLong,"SendMessageA","user32.dll","SendMessage",micHwnd,micDWord  ,micWParam,micLParam

Dim hwnd_1
hwnd_1 = Window("FBMP").Window(">> 新 增").Window("Window").WinObject("TbsListBox").GetROProperty("hwnd")

Dim MyContent
tag = extern.SendMessageA (hwnd_2,&H0189,2,MyContent )

        LB_GETTEXT 的 DWORD就是&H0189,上面那句是想获得LISTBOX下索引为2的列表的内容,但是发现返回为空.我获取行数和选择指定行都成功了,唯独这个获取指定行文本的不能通过,
        还有我打算定义一个MyContent的字符串变量,然后将指针放到SendMessage的第4个参数上传过去.我对VB不熟悉,以前只用过C++和JAVA等,不知道QTP这里的类型要怎么跟API的过度,还有我用ByVal,和ByRef去指定传递的是地址或者直,但都提示语法错误,不是直接 ByVal + 变量名这样吗?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2007-12-5 18:02:34 | 只看该作者
GetRoProptery 能取到hwnd属性吗?
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2007-12-5 18:31:10 | 只看该作者

回复 2# 的帖子

可以
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2007-12-5 19:55:28 | 只看该作者
QTP调用windows API局限限很大,比如说参数为结构的话不能调用,数据类型只能用指定的几种。
对于引用参数的传递,VBScript中的定义是 function abc(byref x, byref y)。
API声明中用类似 micDWord+micByRef 表示输出值

附件希望对你有用。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2007-12-6 09:51:06 | 只看该作者

回复 4# 的帖子

非常感谢,希望有所收获
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2007-12-6 10:29:18 | 只看该作者
暂时我还是采用了笨方法,把WIN API的使用封装到自己用C++打的DLL上,再使用QTP传一些可以传递的参数过去,哎,

VB虽然都说没指针,不过拜读过一些文章,好象有一些方法可以让VB也有指针的相同功能,其实JAVA说没指针,不过是说没有显式的指针而已,JAVA里的引用实际上就是一个地址访问操作.不过自己VB没基础,也是前几天第一次用QTP时才开始接触VB,所以在VB如何接收返回的指针以及类型过度上的一些细节问题上比较糊涂.

希望各位继续知无不言,言无不尽,多多提点提点
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2007-12-6 11:28:33 | 只看该作者

回复 6# 的帖子

你的方法是正解。对于很多QTP无法直接支持的API,只有自己再封一层。
另外,QTP的脚本是VBScript,不是VB,很多VB的特性都没有的。
回复 支持 反对

使用道具 举报

该用户从未签到

8#
 楼主| 发表于 2007-12-6 12:48:42 | 只看该作者

回复 7# 的帖子

啊哦,那对QTP真的是比较失望啊.这样的话可编程性反而不及WINRUNNER了
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2007-12-6 13:09:51 | 只看该作者
extern.Declare micLong,"SendMessageA","user32.dll","SendMessage",micLong ,micLong ,micLong ,micLong  

Dim hwnd_1
hwnd_1 =Window("Notepad").WinEditor("Edit").GetROProperty("hwnd")
msgbox hwnd_1

Dim MyContent
tag = extern.SendMessageA (hwnd_1,&H0189,2,1 )
msgbox tag
我用这样得到的tag是非0的值。不明白你想发什么消息过去,可否详细讲讲你最终干了什么,最好用calc.exe或者notepad.exe来解释,那样大家比较容易交流,谢谢了。
回复 支持 反对

使用道具 举报

该用户从未签到

10#
 楼主| 发表于 2007-12-6 13:22:53 | 只看该作者
不是拿TAG值,,&H0189的宏定义是LB_GETTEXT,我们将变量MYCONTENT的地址传递过去给API,API发送消息到指定句柄后将LISTBOX上指定的TEXT值存到接收到的地址所指的内存里,然后我们就可以直接使用MYCONTENT来访问到所拿到的TEXT了.

我现在实际上是在用自己的方法去精确的操作一些QTP无法操作的COMOBOX类的控件,现在基本上解决了.
回复 支持 反对

使用道具 举报

该用户从未签到

11#
 楼主| 发表于 2007-12-6 13:27:32 | 只看该作者
现在想一想,反而是用WINRUNNER更容易实现
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2007-12-6 13:27:48 | 只看该作者
tag的值代表消息是否发送成功。
不过,anyway,看不懂,谢谢了。
回复 支持 反对

使用道具 举报

该用户从未签到

13#
 楼主| 发表于 2007-12-6 13:42:18 | 只看该作者
是这样,TAG值是是否成功的返回值,单纯从&H0189着个是谁也记不了怎么用的,你进VC++里查一下WINUSER.H就可以大概知道了.
同样的东西放到QTP上运行不了,所以现在也惟有用VC封装一层DLL了..
看看以后有没一些工具的语言是真正意义的编程语言而不是脚本语言.如果有个语言是使用VC++的测试工具就好了,呵呵
回复 支持 反对

使用道具 举报

该用户从未签到

14#
发表于 2007-12-6 13:43:04 | 只看该作者

回复 11# 的帖子

当然,QTP更傻瓜一些。对于没有编程经验的用户更容易上手。其留给用户的操作空间也会小一些。

[ 本帖最后由 gy21st 于 2007-12-6 13:45 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

15#
发表于 2007-12-7 12:02:46 | 只看该作者
估计是由于变量的类型问题所引起.
QTP中不能明确定义类型,这会导致在使用某些API时无法取得返回值.

例:
Dim s As String * 800
T = GetWindowText(2556516, S, 800)
以上代码在Vb中可以正常运行.
但换到QTP后
Dim s As String * 800 这行变为非法.
就会导致
T = GetWindowText(2556516, S, 800)
S无法取得返回值,但该函数正常运行.

正在想办法如何绕过一问题.
有知道的朋友希望能赐教.
回复 支持 反对

使用道具 举报

该用户从未签到

16#
 楼主| 发表于 2007-12-7 12:06:02 | 只看该作者

回复 15# 的帖子

你问的正是我要问的,上面的兄弟说了,QTP的语言是VBS,而不是VB,一个是脚本语言,一个是编译语言,外貌差不多,但是实在差太远了
回复 支持 反对

使用道具 举报

该用户从未签到

17#
发表于 2007-12-7 12:38:35 | 只看该作者
算了,龙虾级的话题,我还是不要再插嘴了,不好意思,又占了个坑

[ 本帖最后由 jackymail 于 2007-12-7 12:44 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

18#
 楼主| 发表于 2007-12-7 13:35:03 | 只看该作者

回复 17# 的帖子

你自己不就是龙虾么,有什么呢,交流而已.
回复 支持 反对

使用道具 举报

该用户从未签到

19#
发表于 2007-12-10 13:21:30 | 只看该作者
我来逛逛,很长时间不用QTP了
回复 支持 反对

使用道具 举报

该用户从未签到

20#
发表于 2008-1-26 11:01:46 | 只看该作者
不错,启发很大
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-22 06:53 , Processed in 0.089193 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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