揭秘QTP的DeviceReplay对象

From:http://blog.csdn.net/Testing_is_believing/article/details/2504745


揭秘QTPDeviceReplay对象

 不知道为什么HP的帮助文档中没有提供关于DeviceReplay的强大功能的信息描述。你可以在Java插件中却可以找到DeviceReplay的属性,但是对于那些不使用Java插件的人可能会觉得这个对象仅在Java程序的测试中可用。

为什么要用DeviceReplay?

有些时候我们需要针对界面做一些指定的动作,例如右键单击一个对象,使用功能键(Fx)来激活某些热键的功能,这时候就可以使用DeviceReplay对象,或者在Object.SetObject.Type方法不生效时使用DeviceReplay

 

并且DeviceReplay在输入特殊符号以及不同语言的文字时会很有用,因为不需要安装指定的字体或改变键盘布局,这对于测试多语言环境的应用程序会非常有用。

 

在鼠标操作方面,我发现DragDrop方法非常有用,可以使用它来执行拖拽的操作,把一个Item从一个Frame拖动到另外一个Frame,或者在应用程序之间拖动。

Mercury.DeviceReplay对象

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.focusWebEdit(“WE”)FireEvent “onfocusin”

 

在调用DeviceReplay对象的方法之前,你需要首先创建DeviceReplay对象:

Set deviceReplay = CreateObject( "Mercury.DeviceReplay" )

Microsoft.VisualBasic.Devices.Keyboard类

为什么我要在介绍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时数据类型必须被转换

System.Windows.Forms.Control 类

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

Mercury.DeviceReplay的方法

SendString方法

描述

向激活的窗口发送一个或多个键盘按键,就像敲击键盘一样。

语法

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

KeyDown方法

描述

模拟一个按键的按下并保持(相当于Win32KEY_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方法就像人工按下一个按键并保持按下的状态。

KeyUp方法

描述

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

语法

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不会对应用程序造成影响。

如果需要组合热键,仅需要像人工执行的方式一样即可。

PressKey方法

描述

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

语法

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

PressNKeys方法

描述

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

语法

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

DragAndDrop方法

描述

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

语法

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

返回值

无。

提示

可以组合使用MouseDownMouseMoveMouseUp方法。

MouseClick方法

描述

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

语法

object.MouseClick( x, y, Button )

参数

object : Mercury.DeviceReplay对象。

:屏幕坐标X轴的值。

:屏幕坐标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

MouseDbClick方法

描述

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

语法

object.MouseDblClick( x, y, Button )

参数

object : Mercury.DeviceReplay对象。

:屏幕坐标X轴的值。

:屏幕坐标Y轴的值。

Button :可能的值包括

        LEFT_MOUSE_BUTTON = 0

        MIDDLE_MOUSE_BUTTON = 1

        RIGHT_MOUSE_BUTTON = 2

返回值

MouseDown方法

描述

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

语法

object.MouseDown( x, y, Button )

参数

object : Mercury.DeviceReplay对象。

:屏幕坐标X轴的值。

:屏幕坐标Y轴的值。

Button :可能的值包括

        LEFT_MOUSE_BUTTON = 0

        MIDDLE_MOUSE_BUTTON = 1

        RIGHT_MOUSE_BUTTON = 2

返回值

提示

应该在MouseDown后使用对应的MouseUp方法。

MouseUp方法

描述

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

语法

object.MouseDown( x, y, Button )

参数

object : Mercury.DeviceReplay对象。

:屏幕坐标X轴的值。

:屏幕坐标Y轴的值。

Button :可能的值包括

        LEFT_MOUSE_BUTTON = 0

        MIDDLE_MOUSE_BUTTON = 1

        RIGHT_MOUSE_BUTTON = 2

返回值

提示

应该让MouseUpMouseDowun方法配对使用。

MouseMove方法

描述

用于释放之前执行的MouseDown方法所按下的鼠标按键。(译者注:这里怀疑是作者笔误,应该是:用于模拟鼠标移动。

语法

object.MouseDown( x, y ) 译者注:这里怀疑是作者笔误,应该是:object.MouseMove( x, y )

参数

object : Mercury.DeviceReplay对象。

:屏幕坐标X轴的值。

:屏幕坐标Y轴的值。

返回值

提示

调试脚本查看在运行时获取到的坐标位置。

在执行键盘操作之前移动鼠标到指定的位置并设置焦点。

SetSynchronizationTimeout方法

描述

设置一个新的同步超时的时间值。

语法

object.MouseDown( x, y ) 译者注:这里怀疑是作者笔误,应该是:object. SetSynchronizationTimeoutnSyncTimeout , is_sec)。

参数

object : Mercury.DeviceReplay对象。

nSyncTimeout : 同步超时的时间值。

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

返回值

提示

建议不要修改这个值。

Key Codes参考

常量

#

描述

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

 

 

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值