简单快乐的工作,生活!

揭秘QTP-Mercury.DeviceReplay

上一篇 / 下一篇  2014-03-11 14:59:33 / 个人分类:QTP

这里介绍一下Mercury.DeviceReplay这个对象,来实现对鼠标、键盘的模拟操作,它是一个很实用的对象,但QTP帮助文档中对几乎没有此介绍。

这个对象用来模拟鼠标的单击和移动、键盘输入等,但有个前提,实用该对象前,需要保证键盘状态正确如NUMLOCK是否打开等,因为DeviceReplay不能检测键盘状态。

1)创建DeviceReplay对象:

Set devReplay=CreateObject("Mercury.DeviceReplay")

2)Mercury.DeviceReplay包括如下方法:

1、SendString方法

向激活的窗口发送一个或多个键盘按键:object.SendString( str )

2、KeyDown方法

模一个按键的按下并保持:object.KeyDown( key ) key : 按键的数值码

3、KeyUp方法
模拟通过键盘释放某个按下的按键:object.KeyUp( key )

4、PressKey方法
模拟通过键盘按下一个按键并立即释放:object.PressKey( key )

5、PressNKeys方法
模拟通过键盘多次按下一个按键并立即释放:object.PressNKey( key, N ) N:重复次数

6、DragAndDrop方法
用于执行从一点拖动到另外一点的操作:object.DragAndDrop( dragX, dragY, dropX, dropY, Button )

Button 的值包括

LEFT_MOUSE_BUTTON = 0

MIDDLE_MOUSE_BUTTON = 1

RIGHT_MOUSE_BUTTON = 2

7、MouseClick方法
在指定的屏幕位置执行鼠标左键或右键的单击操作:object.MouseClick( x, y, Button )

8、MouseDbClick方法
在指定的屏幕位置中执行鼠标左键或右键的双击事件:object.MouseDblClick( x, y, Button )

9、MouseDown方法
在屏幕指定位置按下鼠标左键或右键,并保持按下状态:object.MouseDown( x, y, Button )

10、MouseUp方法
用于释放之前执行的MouseDown方法所按下的鼠标按键:object.MouseDown( x, y, Button )

11、MouseMove方法
用于模拟鼠标移动:object.MouseMove( x, y)

12、SetSynchronizationTimeout方法
设置一个新的同步超时的时间值:object. SetSynchronizationTimeout(nSyncTimeout , is_sec)
nSyncTimeout : 同步超时的时间值

is_sec : 指定设置的时间值是否以秒为单位

3)最后,记得释放DeviceReplay对象

Set devReplay =nothing

4)一个非常简单的鼠标单击的例子

Set devReplay=CreateObject("Mercury.DeviceReplay")
devReplay.MouseMove 650 , 160
devReplay.MouseClick 650,160,0
Set devReplay =nothing

 

一.使用方法

Dim dp

Set dp =CreateObject("Mercury.DeviceReplay") '建立对象

dp.SendString“keyword”

二.局限和绕过方法

1.不能判断一个Control键是否已经被按下

说明:

DeviceReplay是一个强大的未被文档化的对象,但是有一定的局限性。其中一个局限就是不能判断一个Control键是否已经被按下。在输入一个大写字母之前,我们需要知道CAPS-LOCK键是否已经按下。在使用数字键盘之前我们需要检查NUM-LOCK键是否已经被按下。否则我们在切换键盘输入状态时可能得到的并不是我们想要的状态。
Devices.Keyboard
类提供了属性,可用于获取当前的键盘状态,例如当前什么键被按下了,并且提供一个方法用于向激活的窗口发送键盘敲击事件。
几个有用的属性包括:
AltKeyDown -
判断ALT键是否处于按下状态。
CapsLock -
判断CAPS LOCK键是否处于打开状态。
CtrlKeyDown -
判断CTRL键是否处于按下状态。
NumLock -
判断NUM LOCK键是否处于打开状态。
ScrollLock -
判断SCROLL LOCK键是否处于打开状态。
ShiftKeyDown -
判断SHIFT键是否处于按下状态。

例:

Set Keyboard = DotNetFactory.CreateInstance(
"Microsoft.VisualBasic.Devices.Keyboard", "Microsoft.VisualBasic" )
Print CBool( Keyboard.AltKeyDown )
Print CBool( Keyboard.CapsLock )
Print CBool( Keyboard.CtrlKeyDown )
Print CBool( Keyboard.NumLock )
Print CBool( Keyboard.ScrollLock )
Print CBool( Keyboard.ShiftKeyDown )

2.不能获取当前鼠标(光标)在屏幕的位置

说明:

DeviceReplay的另外一个局限是不能获取当前鼠标(光标)在屏幕的位置。而System.Windows.Forms.Control这个类定义了那些拥有视觉表现的控件的基类。
通过MousePosition属性可以获取当前鼠标光标在屏幕坐标的位置。访问MousePosition属性时,可以返回代表鼠标光标位置的Point数据。

例:

Set ctlr = DotNetFactory.CreateInstance("System.Windows.Forms.Control")
For i = 1 To 10
Wait 2
Print "1. X=" & ctlr.MousePosition.X & "; Y=" & ctlr.MousePosition.Y
Next

三.方法

1.DragAndDrop方法

原型:

SubDragAndDrop(ByValDragXAsInteger,ByValDragYAsInteger,ByValDropXAsInteger,ByValDropYAsInteger,ByValButtonAsMouseButton)

功能:

用于执行从一点拖动到另外一点的操作。

语法:

object.DragAndDrop( dragX, dragY, dropX, dropY, Button )

输入参数:

objectMercury.DeviceReplay对象。

dragX:起点坐标的X轴的值。

dragY:起点坐标的Y轴的值。

dropX:终点坐标的X轴的值。

dropY:终点坐标的Y轴的值。

Button:可能的值包括

LEFT_MOUSE_BUTTON = 0

MIDDLE_MOUSE_BUTTON = 1

RIGHT_MOUSE_BUTTON = 2

返回值:

2.GetAndClearSyncFail

原型:

FunctionGetAndClearSyncFailAsLong

功能:

语法:

输入参数:

返回值:

3.KeyDown

原型:

SubKeyDown(ByValKeyAsByte)

功能:

模拟一个按键的按下并保持(相当于Win32KEY_DOWN事件)。

语法:

object.KeyDown( key )

输入参数:

objectMercury.DeviceReplay对象。

key按键的数值码。可查阅后面的“Key Codes参考”。

返回值:

4.KeyUp

原型:

SubKeyUp(ByValKeyAsByte)

功能:

模拟通过键盘释放某个按下的按键。

语法:

object.KeyUp( key )

输入参数:

objectMercury.DeviceReplay对象。

key按键的数值码。可查阅后面的“Key Codes参考”。

返回值:

5.MouseClick

原型:

SubMouseClick(ByValxAsInteger,ByValyAsInteger,ByValButtonAsMouseButton)

功能:

在指定的屏幕位置执行鼠标左键或右键的单击操作。

语法:

object.MouseClick( x, y, Button )

输入参数:

objectMercury.DeviceReplay对象。

x:屏幕坐标X轴的值。

y:屏幕坐标Y轴的值。

Button:可能的值包括

LEFT_MOUSE_BUTTON = 0

MIDDLE_MOUSE_BUTTON = 1

RIGHT_MOUSE_BUTTON = 2

返回值:

6.MouseDblClick

原型:

SubMouseDblClick(ByValxAsInteger,ByValyAsInteger,ByValButtonAsMouseButton)

功能:

在指定的屏幕位置中执行鼠标左键或右键的双击事件。

语法:

object.MouseDblClick( x, y, Button )

输入参数:

objectMercury.DeviceReplay对象。

x:屏幕坐标X轴的值。

y:屏幕坐标Y轴的值。

Button:可能的值包括

LEFT_MOUSE_BUTTON = 0

MIDDLE_MOUSE_BUTTON = 1

RIGHT_MOUSE_BUTTON = 2

返回值:

7.MouseDown

原型:

SubMouseDown(ByValxAsInteger,ByValyAsInteger,ByValButtonAsMouseButton)

功能:

在屏幕指定位置按下鼠标左键或右键,并保持按下状态。

语法:

object.MouseDown( x, y, Button )

输入参数:

objectMercury.DeviceReplay对象。

x:屏幕坐标X轴的值。

y:屏幕坐标Y轴的值。

Button:可能的值包括

LEFT_MOUSE_BUTTON = 0

MIDDLE_MOUSE_BUTTON = 1

RIGHT_MOUSE_BUTTON = 2

返回值:

8.MouseMove

原型:

SubMouseMove(ByValxAsInteger,ByValyAsInteger)

功能:

用于模拟鼠标移动。

语法:

object.MouseMove( x, y, Button )

输入参数:

objectMercury.DeviceReplay对象。

x:屏幕坐标X轴的值。

y:屏幕坐标Y轴的值。

返回值:

9.MouseUp

原型:

SubMouseUp(ByValxAsInteger,ByValyAsInteger,ByValButtonAsMouseButton)

功能:

用于释放之前执行的MouseDown方法所按下的鼠标按键。

语法:

object.MouseUp( x, y )

输入参数:

objectMercury.DeviceReplay对象。

x:屏幕坐标X轴的值。

y:屏幕坐标Y轴的值。

Button:可能的值包括

LEFT_MOUSE_BUTTON = 0

MIDDLE_MOUSE_BUTTON = 1

RIGHT_MOUSE_BUTTON = 2

返回值:

10.PressKey

原型:

SubPressKey(ByValKeyAsByte)

功能:

模拟通过键盘按下一个按键并立即释放。

语法:

object.PressKey( key )

输入参数:

objectMercury.DeviceReplay对象。

key按键的数值码。可查阅后面的“Key Codes参考”。

返回值:

11.PressNKeys

原型:

SubPressNKeys(ByValKeyAsByte,ByValNAsInteger)

功能:

模拟通过键盘多次按下一个按键并立即释放。

语法:

object.PressNKeys( key, N )

输入

TAG:

 

评分:0

我来说两句

我的栏目

日历

« 2024-04-24  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 12875
  • 日志数: 15
  • 书签数: 3
  • 建立时间: 2007-04-04
  • 更新时间: 2014-12-01

RSS订阅