QTP中实现API的调用

上一篇 / 下一篇  2007-06-04 00:07:24

    最近细细品味QTP的帮助文档,对于Windows API的调用吸引了我。因为我之前一直在研究VBS,想提高一下编程能力,加强QTP的脚本编写能力。当时就在想,VBS中似乎不能调用Windows API,而VB却可以。那么QTP中要调用Windows API,是不是和VB一样呢?我把我总结的东西说明一下。不一定都正确,我也在琢磨中,希望大家指正批评啊:)

先从VB中调用API开始

首先要声明需要调用的函数名和函数所在的.dll文件

Declare   Function   函数名   Lib   "libname"   [Alias   "alias"]   [([[ByVal]   variable   [As   type]   [,[ByVal]   variable   [As   type]]...])]   As   Type  

这里的Function,说明是带返回值的,若不带返回值,用Sub。这和VB函数一个概念

函数名: 就是你想注册的函数名。这个名字是随便取的,你爱叫啥就叫啥,只是命名规范要符合VB的规范,如不能特殊字符,不能和关键字相同等等。这里必须和Alias 同时解释。

Alias: Alias后面跟的,其实是真正的API函数名。是真正的啊,不是随便叫的哦!

        可以带Alias,也可以不带Alias。什么时候必须带呢?

        1. API函数参数带有String类型   原因:String类型可以分为ANSI和UNICODE两种。因此,一个函数就有ANSI和UNICODE两种版本。后面加A的,代表ANSI版本。加W的,代表UNICODE版本。例如CopyFileA,CopyFileW分别是两个API函数,支持不同的String类型参数,他们的功能则是完全一样的。

        2. API函数不符合VB的命名规范。API函数中,有些是奇怪的名字,如下划线开头的。_XXX,这在VB中显然是不合法的。哦,天哪,我前面忘说了,如果不带Alias,那么之前的那个函数名,必须和API函数的真正的名字相同。因此,如果API函数名不符合VB的规范,显然就没法用了。所以一定要使用Alias,在Alias后跟的真正的API函数名,是不受VB命名规范的限制的。这样,只要保持前面的函数名是规范的就行。

Lib: 表示指定API函数是在那个.dll文件中。这是必须的,否则上哪儿去调呀。如果引用的过程属于   Windows核心库(User32、Kernel32或GDI32),则可以不包含文件扩展名。而其他的,则最好用全路径加上文件名.dll。

好了,之后在VB中,直接用函数名来调用API的真正函数就行了。

其实很简单吧,就是自己想个函数名出来,然后将它与真正的API函数关联。在代码中,调用你想出来的那个函数,就等于调用了API函数:)

下面说QTP中的调用吧。看了一下帮助文档,晕了我一下。Extern.Declare micHwnd, "GetForeGgroundWindow", "user32.dll", "GetForeGgroundWindow"什么东西呀。镇定一下,哦,原来也差不多嘛。

猜一下它的申明格式: extern.Declare 返回值, 函数名,.dll文件, Alias

搞定,就是这样,呵呵。其实就是和VB一样的概念啦,只是申明的样子变了一下。还有啊,它的数据类型比较奇怪,我也不是很清楚,在下面的例子中会有的。

下面给出在VB和QTP中调用同一个API的例子:调用kernel32.dll中的CopyFILEA函数。

VB:

Private Declare Function myCopyFile Lib "kernel32" Alias "CopyFileA"(ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long

在代码里用myCopyFile,就等于条用了kernel32.dll中的CopyFileA。myCopyFile可以是任意的,只要你高兴,叫它aaa也行~~当然也可以不带Alias,但是函数名就必须是CopyFileA了

Private Declare Function CopyFileA Lib "kernel32" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long

QTP:

Extern.Declare micLong, "myCopyFile", "kernel32.dll", "CopyFileA", micString, micString, micLong

这里"myCopyFile"是自己起的名字,"CopyFileA"就是kernel32.dll中的真正的函数。只是这里的数据类型,为什么都是mic打头的呢?反正不太清楚怎么回事,在前面加上mic就拉到吧。。。

好了,希望对大家有帮助啊,互相讨论哦:)


TAG:

xiaoshi_2011的个人空间 引用 删除 xiaoshi_2011   /   2014-10-24 14:12:11
5
引用 删除 66651805   /   2014-10-10 17:21:14
5
heqingdan的个人空间 引用 删除 heqingdan   /   2008-01-17 13:48:48
It's very kind of you!
ivanland的个人空间 引用 删除 ivanland   /   2007-10-18 14:27:22
还有很多要学习啊~~~~
引用 删除 aeroa   /   2007-08-29 18:00:24
楼主,我也是测试行业的,做白盒一年了。可以认识你吗,请加我QQ:21323165
ohyo12的个人空间 引用 删除 ohyo12   /   2007-06-05 16:01:42
写的不错~~
ohyo12的个人空间 引用 删除 ohyo12   /   2007-06-05 15:41:33
哟,我是第二个人嘛~~板凳~~慢慢学。。不急。。
引用 删除 wuying36172   /   2007-06-05 13:14:16
不错啊,学习拉^_^
 

评分:0

我来说两句

日历

« 2024-09-15  
1234567
891011121314
15161718192021
22232425262728
2930     

数据统计

  • 访问量: 7161
  • 日志数: 8
  • 建立时间: 2007-01-13
  • 更新时间: 2007-12-07

RSS订阅

Open Toolbar