注:本文最早发表在《51测试天地》第九期
原文:The Undocumented DeviceReplay(http://www.advancedqtp.com/2008/03/undocumented-devicereplay/www.advancedqtp.com)
不知道为什么HP的帮助文档中没有提供关于DeviceReplay的强大功能的信息描述。你可以在Java插件中却可以找到DeviceReplay的属性,但是对于那些不使用Java插件的人可能会觉得这个对象仅在Java程序的测试中可用。
有些时候我们需要针对界面做一些指定的动作,例如右键单击一个对象,使用功能键(Fx)来激活某些热键的功能,这时候就可以使用DeviceReplay对象,或者在Object.Set和Object.Type方法不生效时使用DeviceReplay。
并且DeviceReplay在输入特殊符号以及不同语言的文字时会很有用,因为不需要安装指定的字体或改变键盘布局,这对于测试多语言环境的应用程序会非常有用。
在鼠标操作方面,我发现DragDrop方法非常有用,可以使用它来执行拖拽的操作,把一个Item从一个Frame拖动到另外一个Frame,或者在应用程序之间拖动。
Mercury.DeviceReplay对象用于模拟鼠标单击和移动,还有键盘输入等操作。要使用DeviceReplay,你必须确保被测试的应用程序(AUT)是处于激活状态的窗口。如果你想对某个对象执行一项操作,则该对象必须拥有焦点(focus)。对于Windows应用程序,可以使用Activate方法:
Window( "W" ).Activate micLeftBtn
如果想把焦点设置到某个指定的对象上,通常使用Click方法可以完成。
对于Web环境的应用程序,Activate方法不被支持,因此可以使用下面的技巧来完成:
hwnd = Browser( "B" ).GetROProperty( "hwnd" )
Window( "hwnd:=" & hwnd ).Activate micLeftBtn
通常可以使用FireEvent “onfocusin”或object.focus,例如WebEdit(“WE”).Object.focus或WebEdit(“WE”)。FireEvent “onfocusin”。
在调用DeviceReplay对象的方法之前,你需要首先创建DeviceReplay对象:
Set deviceReplay = CreateObject( "Mercury.DeviceReplay" )
为什么我要在介绍DeviceReplay对象之前介绍这个.NET的类呢?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 )
注意:在使用DotNetFactory时数据类型必须被转换
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
描述
向激活的窗口发送一个或多个键盘按键,就像敲击键盘一样。
语法
object.SendString( str )
参数
object : Mercury.DeviceReplay对象。
str : 敲击的字符串。
返回值
无。
例子
下面的例子会激活记事本(notepad)并输入一段字符:
Set deviceReplay = CreateObject( "Mercury.DeviceReplay" )
SystemUtil.Run "notepad.exe", "", "", "open"
' ** this line always identifies the notepad window.
Window( "nativeclass:=Notepad", "index:=0" ).Activate micLeftBtn
deviceReplay.SendString( "DeviceReplay" )
Set deviceReplay = Nothing
描述
模拟一个按键的按下并保持(相当于Win32的KEY_DOWN事件)。
语法
object.KeyDown( key )
参数
object : Mercury.DeviceReplay对象。
key : 按键的数值码。可查阅后面的“Key Codes 参考”。
返回值
无。
例子
下面的例子会激活记事本(notepad)程序并使用大写和小写的方式输入字符串。注意在发送第一个字符串时,SHIFT键保持被按下的状态:
Const VK_SHIFT = 42
Const VK_RETURN = 28
Set deviceReplay = CreateObject( "Mercury.DeviceReplay" )
SystemUtil.Run "notepad.exe", "", "", "open"
Window( "nativeclass:=Notepad", "index:=0" ).Activate micLeftBtn
' ** Typing uppercase
deviceReplay.KeyDown VK_SHIFT
deviceReplay.SendString( "devicereplay" )
deviceReplay.PressKey VK_RETURN
deviceReplay.KeyUp VK_SHIFT
' ** Typing in lower case
deviceReplay.SendString( "devicereplay" )
Set deviceReplay = Nothing
提示
在KeyDown后应该有相应的KeyUp方法的调用。
KeyDown方法就像人工按下一个按键并保持按下的状态。
描述
模拟通过键盘释放某个按下的按键。
语法
object.KeyUp( key )
参数
object : Mercury.DeviceReplay对象。
key : 按键的数值码。可查阅后面的“Key Codes 参考”。
返回值
无。
例子
下面的例子会激活并并使用热键CTRL+O来打开记事本(notepad)的菜单,然后用ESC键关闭对话框。
Const VK_O = 24
Const VK_CONTROL = 29
Const VK_ESCAPE = 1
Set deviceReplay = CreateObject( "Mercury.DeviceReplay" )
SystemUtil.Run "notepad.exe", "", "", "open"
Window( "nativeclass:=Notepad", "index:=0" ).Activate micLeftBtn
' ** Typing uppercase
Wait 1
' ** Opening the menu Ctrl + O
deviceReplay.KeyDown VK_CONTROL
deviceReplay.PressKey VK_O
deviceReplay.KeyUp VK_CONTROL
Wait 2
' ** Closing the menu
deviceReplay.PressKey VK_ESCAPE
deviceReplay.SendString "Menu Open, was closed."
Set deviceReplay = Nothing
提示
KeyUp方法应该与KeyDown方法配对使用。
多个KeyUp不会对应用程序造成影响。
如果需要组合热键,仅需要像人工执行的方式一样即可。
描述
模拟通过键盘按下一个按键并立即释放。
语法
object.PressKey( key )
参数
object : Mercury.DeviceReplay对象。
key : 按键的数值码。可查阅后面的“Key Codes 参考”。
返回值
无。
例子
下面的例子会激活记事本并使用热键CTRL+O来模拟选择文件打开菜单,然后用ESCAPE按键关闭对话框。
Const VK_O = 24 : Const VK_F = 33
Const VK_CONTROL = 29 : Const VK_ESCAPE = 1 : Const VK_MENU = 56
Set deviceReplay = CreateObject( "Mercury.DeviceReplay" )
SystemUtil.Run "notepad.exe", "", "", "open"
Window( "nativeclass:=Notepad", "index:=0" ).Activate micLeftBtn
Wait 1
' ** Opening the menu Alt + F + O
deviceReplay.PressKey VK_MENU
deviceReplay.PressKey VK_F
deviceReplay.PressKey VK_O
Wait 2
' ** Closing the menu
deviceReplay.PressKey VK_ESCAPE
deviceReplay.SendString "Open menu was closed."
Set deviceReplay = Nothing
描述
模拟通过键盘多次按下一个按键并立即释放。
语法
object.PressNKey( key, N )
参数
object : Mercury.DeviceReplay对象。
key : 按键的数值码。可查阅后面的“Key Codes 参考”。
N:重复的次数。
返回值
无。
例子
例1 – 美国的州
Option Explicit
Const VK_RETURN = 28 : Const VK_F = 33 : Const VK_O = 24
Const VK_TAB = 15 : Const VK_F5 = 63
Const VK_CAPITAL = 58 : Const VK_NUMLOCK = 69
Const VK_SUBTRACT = 74 : Const VK_MULTIPLY = 55
Const VK_MENU = 56
Dim deviceReplay
Private Sub SetupKeyboard()
Const CLASS_NAME = "Microsoft.VisualBasic.Devices.Keyboard"
Const ASSEMBLY = "Microsoft.VisualBasic"
Dim Keyboard
Set Keyboard = DotNetFactory.CreateInstance( CLASS_NAME, ASSEMBLY )
If CBool( Keyboard.CapsLock ) Then
deviceReplay.PressKey VK_CAPITAL
End If
If CBool( Keyboard.NumLock ) = False Then
deviceReplay.PressKey VK_NUMLOCK
End If
Set Keyboard = Nothing
End Sub
Private Sub SetupNotepad()
deviceReplay.PressKey VK_MENU
deviceReplay.PressKey VK_O
deviceReplay.PressKey VK_F
deviceReplay.SendString "Courier New"
deviceReplay.PressKey VK_TAB
deviceReplay.PressKey VK_TAB
deviceReplay.SendString "14"
deviceReplay.PressKey VK_RETURN
Wait 1
End Sub
Private Sub PrintRow( ByVal state, ByVal usps, byVal capital )
deviceReplay.SendString state
deviceReplay.PressKey VK_TAB
If Len( state ) < 8 Then
deviceReplay.PressKey VK_TAB
End If
deviceReplay.SendString usps
deviceReplay.PressKey VK_TAB
deviceReplay.SendString capital
deviceReplay.PressKey VK_RETURN
End Sub
Set deviceReplay = CreateObject( "Mercury.DeviceReplay" )
SystemUtil.Run "notepad.exe", "", "", "open", 3
Window( "nativeclass:=Notepad", "index:=0" ).Activate micLeftBtn
' ** Setup Notepad - Font courier new, size 14,
' ** NUM-LOCK pressed and CAPS-LOCK unpressed
Call SetupKeyboard()
Call SetupNotepad()
' ** inserting date
deviceReplay.PressKey VK_F5
deviceReplay.PressKey VK_RETURN
' ** Inserting Title
deviceReplay.PressNKeys VK_TAB, 3
deviceReplay.SendString " United States of America "
deviceReplay.PressKey VK_RETURN
deviceReplay.PressNKeys VK_TAB, 3
deviceReplay.PressNKeys VK_MULTIPLY, Len( " United States of America " )
deviceReplay.PressNKeys VK_RETURN, 2
' ** Table Headers
deviceReplay.SendString "State"
deviceReplay.PressKey VK_TAB
deviceReplay.PressKey VK_TAB
deviceReplay.SendString "USPS"
deviceReplay.PressKey VK_TAB
deviceReplay.SendString "Capital"
deviceReplay.PressKey VK_RETURN
deviceReplay.PressNKeys VK_SUBTRACT, 31
deviceReplay.PressKey VK_RETURN
' ** Print Data
Call PrintRow( " Alabama ", "AL", "Montgomery" )
Call PrintRow( " Alaska ", "AK", " Juneau " )
Call PrintRow( " Arizona ", "AZ", " Phoenix " )
Call PrintRow( " Arkansas ", "AR", " Little Rock " )
Call PrintRow( " California ", "CA", " Sacramento " )
Call PrintRow( " Colorado ", "CO", " Denver " )
Call PrintRow( " Connecticut ", "CT", " Hartford " )
Call PrintRow( " Delaware ", "DE", " Dover " )
Call PrintRow( " Florida ", "FL", " Tallahassee " )
Call PrintRow( "Georgia", "GA", " Atlanta " )
Call PrintRow( " Hawaii ", "HA", " Honolulu " )
Call PrintRow( " Idaho ", "ID", " Boise " )
Call PrintRow( " Illinois ", "IL", " Springfield " )
Call PrintRow( "Indiana", "IN", " Indianapolis " )
Call PrintRow( " Iowa ", "IA", " Des Moines " )
Call PrintRow( " Kansas ", "KS", " Topeka " )
Call PrintRow( " Kentucky ", "KY", " Frankfort " )
Call PrintRow( " Louisiana ", "LA", " Baton Rouge " )
Call PrintRow( " Maine ", "ME", "Augusta" )
Call PrintRow( " Maryland ", "MD", " Annapolis " )
Call PrintRow( " Massachusetts ", "MA", " Boston " )
Call PrintRow( " Michigan ", "MI", "Lansing" )
Call PrintRow( " Minnesota ", "MN", " Saint Paul " )
Call PrintRow( " Mississippi ", "MS", "Jackson" )
Call PrintRow( " Missouri ", "MO", " Jefferson City " )
Call PrintRow( " Montana ", "MT", "Helena" )
Call PrintRow( " Nebraska ", "NE", "Lincoln" )
Call PrintRow( " Nevada ", "NV", " Carson City " )
Call PrintRow( " New Hampshire ", "NH", " Concord " )
Call PrintRow( " New Jersey ", "NJ", " Trenton " )
Call PrintRow( " New Mexico ", "NM", " Santa Fe " )
Call PrintRow( " New York ", "NY", " Albany " )
Call PrintRow( " North Carolina ", "NC", "Raleigh" )
Call PrintRow( " North Dakota ", "ND", "Bismarck" )
Call PrintRow( " Ohio ", "OH", " Columbus " )
Call PrintRow( " Oklahoma ", "OK", " Oklahoma City " )
Call PrintRow( " Oregon ", "OR", " Salem " )
Call PrintRow( " Pennsylvania ", "PA", " Harrisburg " )
Call PrintRow( " Rhode Island ", "RI", " Providence " )
Call PrintRow( " South Carolina ", "SC", " Columbia " )
Call PrintRow( " South Dakota ", "SD", "Pierre" )
Call PrintRow( " Tennessee ", "TN", " Nashville " )
Call PrintRow( " Texas ", "TX", "Austin" )
Call PrintRow( " Utah ", "UT", " Salt Lake City " )
Call PrintRow( " Vermont ", "VT", " Montpelier " )
Call PrintRow( "Virginia", "VA", " Richmond " )
Call PrintRow( "Washington", "WA", " Olympia " )
Call PrintRow( " West Virginia ", "WV", " Charleston " )
Call PrintRow( " Wisconsin ", "WI", "Madison" )
Call PrintRow( " Wyoming ", "WY", " Cheyenne " )
Set deviceReplay = Nothing
例2 – 拉丁文和字符
Option Explicit
Const VK_NUMPAD0 = 82
Const VK_NUMPAD1 = 79
Const VK_NUMPAD2 = 80
Const VK_NUMPAD3 = 81
Const VK_NUMPAD4 = 75
Const VK_NUMPAD5 = 76
Const VK_NUMPAD6 = 77
Const VK_NUMPAD7 = 71
Const VK_NUMPAD8 = 72
Const VK_NUMPAD9 = 73
Const VK_MENU = 56
Const VK_SHIFT = 42
Const VK_RETURN = 28
Const VK_F = 33
Const VK_O = 24
Const VK_TAB = 15
Const VK_F5 = 63
Const VK_NUMLOCK = 69
Dim deviceReplay
Private Sub SetupKeyboard()
Const CLASS_NAME = "Microsoft.VisualBasic.Devices.Keyboard"
Const ASSEMBLY = "Microsoft.VisualBasic"
Dim Keyboard
Set Keyboard = DotNetFactory.CreateInstance( CLASS_NAME, ASSEMBLY )
If CBool( Keyboard.CapsLock ) Then
deviceReplay.PressKey VK_CAPITAL
End If
If CBool( Keyboard.NumLock ) = False Then
deviceReplay.PressKey VK_NUMLOCK
End If
Set Keyboard = Nothing
End Sub
Private Sub SetupNotepad()
deviceReplay.PressKey VK_MENU
deviceReplay.PressKey VK_O
deviceReplay.PressKey VK_F
deviceReplay.SendString "Courier New"
deviceReplay.PressKey VK_TAB
deviceReplay.PressKey VK_TAB
deviceReplay.SendString "14"
deviceReplay.PressKey VK_RETURN
Wait 1
End Sub
Private Sub PrintCharacter( ByVal code )
Dim i, digit
deviceReplay.KeyDown VK_MENU
For i = 1 To Len( code )
digit = Mid( code, i, 1 )
Execute "deviceReplay.PressKey VK_NUMPAD" & digit
Next
deviceReplay.KeyUp VK_MENU
deviceReplay.PressKey VK_RETURN
End Sub
Set deviceReplay = CreateObject( "Mercury.DeviceReplay" )
SystemUtil.Run "notepad.exe", "", "", "open", 3
Window( "nativeclass:=Notepad", "index:=0" ).Activate micLeftBtn
' ** Setup Notepad - Font courier new, size 14,
' ** NUM-LOCK pressed and CAPS-LOCK unpressed
Call SetupKeyboard()
Call SetupNotepad()
' ** inserting date
deviceReplay.PressKey VK_F5
deviceReplay.PressKey VK_RETURN
' ** a grave character
deviceReplay.SendString "A grave: "
Call PrintCharacter( "0192" )
' ** O circumflex character
deviceReplay.SendString "O circumflex: "
Call PrintCharacter( "0212" )
' ** s caron character
deviceReplay.SendString "s caron: "
Call PrintCharacter( "0154" )
' ** n tilde character
deviceReplay.SendString "n tilde: "
Call PrintCharacter( "164" )
' ** Y umlaut character
deviceReplay.SendString "Y umlaut: "
Call PrintCharacter( "0159" )
' ** c cedila character
deviceReplay.SendString "c cedila: "
Call PrintCharacter( "0231" )
' ** O with accent character
deviceReplay.SendString "O with accent: "
Call PrintCharacter( "0211" )
' ** Inverted question mark character
deviceReplay.SendString "Inverted question mark: "
Call PrintCharacter( "168" )
' ** Euro character
deviceReplay.SendString "Euro: "
Call PrintCharacter( "0128" )
' ** i with accent character
deviceReplay.SendString "i with accent : "
Call PrintCharacter( "0237" )
' ** Male Sign character
deviceReplay.SendString "Male Sign: "
Call PrintCharacter( "11" )
' ** AE ligature character
deviceReplay.SendString "AE ligature: "
Call PrintCharacter( "0198" )
' ** aa character
deviceReplay.SendString "aa: "
Call PrintCharacter( "0197" )
' ** oethel character
deviceReplay.SendString "oethel: "
Call PrintCharacter( "0156" )
' ** Eth character
deviceReplay.SendString "Eth: "
Call PrintCharacter( "0208" )
' ** Uppercase Sigma character
deviceReplay.SendString "Uppercase Sigma: "
Call PrintCharacter( "228" )
Set deviceReplay = Nothing
描述
用于执行从一点拖动到另外一点的操作。
语法
object.DragAndDrop( dragX, dragY, dropX, dropY, Button )
参数
object : Mercury.DeviceReplay对象。
dragX :起点坐标的X轴的值。
dragY :起点坐标的Y轴的值。
dropX :终点坐标的X轴的值。
dropY :终点坐标的Y轴的值。
Button :可能的值包括
LEFT_MOUSE_BUTTON = 0
MIDDLE_MOUSE_BUTTON = 1
RIGHT_MOUSE_BUTTON = 2
返回值
无。
提示
可以组合使用MouseDown、MouseMove和MouseUp方法。
描述
在指定的屏幕位置执行鼠标左键或右键的单击操作。
语法
object.MouseClick( x, y, Button )
参数
object : Mercury.DeviceReplay对象。
x :屏幕坐标X轴的值。
y :屏幕坐标Y轴的值。
Button :可能的值包括
LEFT_MOUSE_BUTTON = 0
MIDDLE_MOUSE_BUTTON = 1
RIGHT_MOUSE_BUTTON = 2
返回值
无。
例子
下面的例子在执行之前需要做一定的准备工作。例子的目的是在www.advancedqtp.com网站上执行DragAndDrop操作,如果在录制时执行拖拽操作,则不会被录制下来。因此这个例子是支持某些操作的例子。这个例子在IE环境下测试通过。
打开IE浏览器并导航到www.advancedqtp.com。这个例子会交换dbxhandle项,这些对象可以被拖拽以便满足个性化显示的要求。
打开QTP(加载Web插件),新建一个测试,打开对象库(object repository)并添加浏览器中的页面对象到本地对象库(local object repository)中。
重命名对象…
Option Explicit
Const LEFT_MOUSE_BUTTON = 0
Dim oWebElemDesc1, oWebElemDesc2
Dim oWebElem1, oWebElem2
Dim devRep
Dim nX1, nX2, nY1, nY2, nH1, nH2, hwnd
Dim point1, point2
' ** This class holds a point coordinate
Class Point
Private mX, mY
Property Let X( ByVal value )
mX = value
End Property
Property Get X()
X = mX
End Property
Property Let Y( ByVal value )
mY = value
End Property
Property Get Y()
Y = mY
End Property
End Class
' ** Retrieving the handle of the browser
hwnd = Browser("QTP").GetROProperty( "hwnd" )
Window( "hwnd:=" & hwnd ).Activate
' ** Create a description for 'Program Professionally'
Set oWebElemDesc1 = Description.Create()
oWebElemDesc1( "micclass" ).Value = "WebElement"
oWebElemDesc1( "html tag" ).Value = "H3"
oWebElemDesc1( "innertext" ).Value = "Program Professionally"
oWebElemDesc1( "class" ).Value = "dbx-handle dbx-handle-cursor"
' ** Create a description for 'Links'
Set oWebElementDesc2 = Description.Create()
oWebElemDesc2( "micclass" ).Value = "WebElement"
oWebElemDesc2( "html tag" ).Value = "H3"
oWebElemDesc2( "innertext" ).Value = "Links"
oWebElemDesc2( "class" ).Value = "dbx-handle dbx-handle-cursor"
' ** Searching for the elements
With Browser( "QTP" ).Page( "QTP" )
If .ChildObjects( oWebElemDesc1 ).Count = 1 Then
Set oWebElem1 = .WebElement( oWebElemDesc1 )
If .ChildObjects( oWebElemDesc2 ).Count = 1 Then
Set oWebElem2 = .WebElement( oWebElemDesc2 )
Else
Print "Web Element 'Program Professionally' was not found."
ExitTest( micFail )
End If
Else
Print "Web Element 'Program Professionally' was not found."
ExitTest( micFail )
End If
End With
' ** Retrieve elements dimensions
nX1 = oWebElem1.GetROProperty( "abs_x" )
nH1 = oWebElem1.GetROProperty( "height" )
nY1 = oWebElem1.GetROProperty( "abs_y" )
nX2 = oWebElem2.GetROProperty( "abs_x" )
nH2 = oWebElem2.GetROProperty( "height" )
nY2 = oWebElem2.GetROProperty( "abs_y" )
Set point1 = New Point
point1.X = nX1 + 10
point1.Y = nY1 + nH1 - 10
Set point2 = New Point
' ** Dragging up
If nY1 > nY2 Then
point2.X = nX2 + 20
point2.Y = nY2 + nH2 - 20
Else
' ** Dragging down
point2.X = nX2 + 20
point2.Y = nY2 + nH2 + 20
End If
Set devRep = CreateObject( "Mercury.DeviceReplay" )
devRep.DragAndDrop point1.X, point1.Y, _
point2.X, point2.Y, LEFT_MOUSE_BUTTON
描述
在指定的屏幕位置中执行鼠标左键或右键的双击事件。
语法
object.MouseDblClick( x, y, Button )
参数
object : Mercury.DeviceReplay对象。
x :屏幕坐标X轴的值。
y :屏幕坐标Y轴的值。
Button :可能的值包括
LEFT_MOUSE_BUTTON = 0
MIDDLE_MOUSE_BUTTON = 1
RIGHT_MOUSE_BUTTON = 2
返回值
无
描述
在屏幕指定位置按下鼠标左键或右键,并保持按下状态。
语法
object.MouseDown( x, y, Button )
参数
object : Mercury.DeviceReplay对象。
x :屏幕坐标X轴的值。
y :屏幕坐标Y轴的值。
Button :可能的值包括
LEFT_MOUSE_BUTTON = 0
MIDDLE_MOUSE_BUTTON = 1
RIGHT_MOUSE_BUTTON = 2
返回值
无
提示
应该在MouseDown后使用对应的MouseUp方法。
描述
用于释放之前执行的MouseDown方法所按下的鼠标按键。
语法
object.MouseDown( x, y, Button )
参数
object : Mercury.DeviceReplay对象。
x :屏幕坐标X轴的值。
y :屏幕坐标Y轴的值。
Button :可能的值包括
LEFT_MOUSE_BUTTON = 0
MIDDLE_MOUSE_BUTTON = 1
RIGHT_MOUSE_BUTTON = 2
返回值
无
提示
应该让MouseUp和MouseDowun方法配对使用。
描述
用于释放之前执行的MouseDown方法所按下的鼠标按键。(译者注:这里怀疑是作者笔误,应该是:用于模拟鼠标移动。)
语法
object.MouseDown( x, y ) (译者注:这里怀疑是作者笔误,应该是:object.MouseMove( x, y )。)
参数
object : Mercury.DeviceReplay对象。
x :屏幕坐标X轴的值。
y :屏幕坐标Y轴的值。
返回值
无
提示
调试脚本查看在运行时获取到的坐标位置。
在执行键盘操作之前移动鼠标到指定的位置并设置焦点。
描述
设置一个新的同步超时的时间值。
语法
object.MouseDown( x, y ) (译者注:这里怀疑是作者笔误,应该是:object. SetSynchronizationTimeout(nSyncTimeout , is_sec)。)
参数
object : Mercury.DeviceReplay对象。
nSyncTimeout : 同步超时的时间值。
is_sec : 指定设置的时间值是否以秒为单位。
返回值
无
提示
建议不要修改这个值。
常量 |
# |
描述 |
VK_ESCAPE |
1 |
主要用于取消命令操作,或者从一个处理过程中退出。 |
VK_1 |
2 |
数字键1,与VK_SHIFT键组合将输入某个特殊字符(取决于键盘布局)。 |
VK_2 |
3 |
数字键2,与VK_SHIFT键组合将输入某个特殊字符(取决于键盘布局) |
VK_3 |
4 |
数字键3,与VK_SHIFT键组合将输入某个特殊字符(取决于键盘布局)。 |
VK_4 |
5 |
数字键4,与VK_SHIFT键组合将输入某个特殊字符(取决于键盘布局) |
VK_5 |
6 |
数字键5,与VK_SHIFT键组合将输入某个特殊字符(取决于键盘布局)。 |
VK_6 |
7 |
数字键6,与VK_SHIFT键组合将输入某个特殊字符(取决于键盘布局)。 |
VK_7 |
8 |
数字键7,与VK_SHIFT键组合将输入某个特殊字符(取决于键盘布局)。 |
VK_8 |
9 |
数字键8,与VK_SHIFT键组合将输入某个特殊字符(取决于键盘布局)。 |
VK_9 |
10 |
数字键9,与VK_SHIFT键组合将输入某个特殊字符(取决于键盘布局)。 |
VK_0 |
11 |
数字键0,与VK_SHIFT键组合将输入某个特殊字符(取决于键盘布局)。 |
VK_MINUS |
12 |
减号(-)或下划线(_),(取决于键盘布局)。 |
VK_EQUAL |
13 |
等号(=)或加号(+),(取决于键盘布局)。 |
VK_BACKSPACE |
14 |
用于删除光标左边的字符,可通过组合单击和拖拽操作来高亮显示文本,然后单击BACKSPACE键来删除所选文本。 |
VK_TAB |
15 |
TAB按键可用于在文档中设置TAB位置,移动光标到指定位置,与SHIFT键组合可以跳转到前一个TAB位置。 |
VK_Q |
16 |
与SHIFT按键组合或按下CAPS-LOCK表示大写字母Q。 |
VK_W |
17 |
与SHIFT按键组合或按下CAPS-LOCK表示大写字母W。 |
VK_E |
18 |
与SHIFT按键组合或按下CAPS-LOCK表示大写字母E。 |
VK_R |
19 |
与SHIFT按键组合或按下CAPS-LOCK表示大写字母R。 |
VK_TAB |
20 |
用于在文档中设置TAB位置,移动光标到指定位置,与SHIFT键组合可以跳转到前一个TAB位置。 |
VK_Y |
21 |
与SHIFT按键组合或按下CAPS-LOCK表示大写字母Y。 |
VK_U |
22 |
与SHIFT按键组合或按下CAPS-LOCK表示大写字母U。 |
VK_I |
23 |
与SHIFT按键组合或按下CAPS-LOCK表示大写字母I。 |
VK_O |
24 |
与SHIFT按键组合或按下CAPS-LOCK表示大写字母O。 |
VK_P |
25 |
与SHIFT按键组合或按下CAPS-LOCK表示大写字母P。 |
VK_OBRACKET |
26 |
左中括号[或左大括号{,取决于键盘布局。 |
VK_CBRACKET |
27 |
右中括号[或右大括号{,取决于键盘布局。 |
VK_RETURN |
28 |
回车键用于把光标设置到下一行的开头。也被用于完成一个命令并告诉计算机执行下一条命令。 |
VK_CONTROL |
29 |
CTRL键,用于与其它按键组合来执行特定的命令,例如CRL/ALT/DEL执行系统重启命令。 |
VK_A |
30 |
与SHIFT按键组合或按下CAPS-LOCK表示大写字母A。 |
VK_S |
31 |
与SHIFT按键组合或按下CAPS-LOCK表示大写字母S。 |
VK_D |
32 |
与SHIFT按键组合或按下CAPS-LOCK表示大写字母D。 |
VK_F |
33 |
与SHIFT按键组合或按下CAPS-LOCK表示大写字母F。 |
VK_G |
34 |
与SHIFT按键组合或按下CAPS-LOCK表示大写字母G。 |
VK_H |
35 |
与SHIFT按键组合或按下CAPS-LOCK表示大写字母H。 |
VK_J |
36 |
与SHIFT按键组合或按下CAPS-LOCK表示大写字母J。 |
VK_K |
37 |
与SHIFT按键组合或按下CAPS-LOCK表示大写字母K。 |
VK_L |
38 |
与SHIFT按键组合或按下CAPS-LOCK表示大写字母L。 |
VK_SEMICOLON |
39 |
分号(;)或冒号(:),取决于键盘布局。 |
VK_SINGLE_QUOTE |
40 |
单引号(‘)或双引号(“) ,取决于键盘布局。 |
VK_APOSTROPHE |
41 |
波浪号(~)或(`),取决于键盘布局。 |
VK_SHIFT |
42 |
把小写字母换成大写字母,把数字换成特殊字符。 |
VK_PIPE |
43 |
斜线(/)或竖线(|),取决于键盘布局。 |
VK_Z |
44 |
与SHIFT按键组合或按下CAPS-LOCK表示大写字母Z。 |
VK_X |
45 |
与SHIFT按键组合或按下CAPS-LOCK表示大写字母X。 |
VK_C |
46 |
与SHIFT按键组合或按下CAPS-LOCK表示大写字母C。 |
VK_V |
47 |
与SHIFT按键组合或按下CAPS-LOCK表示大写字母V。 |
VK_B |
48 |
与SHIFT按键组合或按下CAPS-LOCK表示大写字母B。 |
VK_N |
49 |
与SHIFT按键组合或按下CAPS-LOCK表示大写字母N。 |
VK_M |
50 |
与SHIFT按键组合或按下CAPS-LOCK表示大写字母M。 |
VK_COMMA |
51 |
逗号(,)或左尖括号(<),取决于键盘布局。 |
VK_DOT |
52 |
点号(.)或右尖括号(>),取决于键盘布局。 |
VK_SLASH |
53 |
反斜杠号(/)或问号(?),取决于键盘布局。 |
VK_RSHIFT |
54 |
把小写字母换成大写字母,把数字换成特殊字符。 |
VK_MULTIPLY |
55 |
乘号(*) |
VK_MENU |
56 |
用于与其它键组合输入关键字。也用于组合数字键盘上的按键来输入ASCII码。 |
VK_SPACE |
57 |
空格键 |
VK_CAPITAL |
58 |
CAPS LOCK键 |
VK_F1 |
59 |
在DOS时代,F1通常用于调出帮助菜单,显示帮助信息。在Windows操作系统中也作为显示帮助信息的热键。 |
VK_F2 |
60 |
在Windows中可用于重命名、高亮显示文件夹或文件并输入新的名字。 |
VK_F3 |
61 |
在Windows中可用于查找文件。 |
VK_F4 |
62 |
在IE中可以按F4打开地址栏,组合ALT和F4将关闭窗口。 |
VK_F5 |
63 |
刷新按钮。 |
VK_F6 |
64 |
把光标移动到程序的其它可停留的位置。 |
VK_F7 |
65 |
在Windows中F7没有任何功能,在某些程序中可能会用上,可以打开程序的帮助文档查看F7的功能。 |
VK_F8 |
66 |
在计算机启动过程中可以使用F8来进入安全模式。 |
VK_F9 |
67 |
在Windows中F9没有任何功能,在某些程序中可能会用上,可以打开程序的帮助文档查看F7的功能。 |
VK_F10 |
68 |
在很多程序中F10被用于激活菜单栏,可以使用F10来定位到第一个菜单选择项,然后用方向键来移动并选择菜单。组合SHIFT键与F10将打开快捷菜单,相当于右键弹出菜单。 |
VK_NUMLOCK |
69 |
允许数字键盘中的数字按键可用,而不是光标控制键可用。按下一次NUMLOCK键,则激活NUMLOCK,并且键盘板上的灯会亮;再按一次NUMLOCK键则回到正常模式。 |
VK_SCROLL |
70 |
在某些程序中能控制光标控制键。很多应用程序忽略这个设置。按下一次ScrollLock键将激活ScrollLock模式,并且键盘板上相应的灯会亮;再按一次ScrollLock键则回到正常模式。 |
VK_HOME |
71 |
把光标移动到当前行的开头。 |
VK_NUMPAD7 |
71 |
只有VK_NUMLOCK被按下时才生效。 |
VK_UP |
72 |
向上键 |
VK_NUMPAD8 |
72 |
只有VK_NUMLOCK被按下时才生效。 |
VK_PRIOR |
73 |
把光标移动到上一页。 |
VK_NUMPAD9 |
73 |
只有VK_NUMLOCK被按下时才生效。 |
VK_SUBTRACT |
74 |
减号键。 |
VK_LEFT |
75 |
向左键。 |
VK_NUMPAD4 |
75 |
只有VK_NUMLOCK被按下时才生效。 |
VK_CLEAR |
76 |
|
VK_NUMPAD5 |
76 |
只有VK_NUMLOCK被按下时才生效。 |
VK_RIGHT |
77 |
向右键。 |
VK_NUMPAD6 |
77 |
只有VK_NUMLOCK被按下时才生效。 |
VK_ADD |
78 |
加号键。 |
VK_END |
79 |
移动光标到当前行的最后。 |
VK_NUMPAD1 |
79 |
只有VK_NUMLOCK被按下时才生效。 |
VK_DOWN |
80 |
向下键。 |
VK_NUMPAD2 |
80 |
只有VK_NUMLOCK被按下时才生效。 |
VK_NEXT |
81 |
移动光标到下一页。 |
VK_NUMPAD3 |
81 |
只有VK_NUMLOCK被按下时才生效。 |
VK_INSERT |
82 |
在一行文本中插入字符,每插入一个字符,剩下的文字向右移动一个光标位置。 |
VK_NUMPAD0 |
82 |
只有VK_NUMLOCK被按下时才生效。 |
VK_DELETE |
83 |
在一行文本中删除一个字符,每删除一个字符,剩下的文字向左移动一个光标位置。 |
VK_SNAPSHOT |
84 |
打印屏幕。 |
VK_BACKSLASH |
86 |
斜杠号(/)。 |
VK_F11 |
87 |
在IE中按下F11会把窗口打开到全屏状态,并且把工具栏隐藏以便查看更多的信息,再次按下F11则回到正常状态。 |
VK_F12 |
88 |
在Windows中F12没有任何功能,在某些程序中可能会用上,可以打开程序的帮助文档查看F7的功能。 |
VK_NUMPAD5 |
89 |
|
VK_ZOOM |
98 |
|
VK_HELP |
99 |
|
VK_F13 |
100 |
|
VK_F14 |
101 |
|
VK_F15 |
102 |
|
VK_F16 |
103 |
|
VK_F17 |
104 |
|
VK_F18 |
105 |
|
VK_F19 |
106 |
|
VK_F20 |
107 |
|
VK_F21 |
108 |
|
VK_F22 |
109 |
|
VK_F23 |
110 |
|