一. 使用方法
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方法
原型:
Sub DragAndDrop(ByVal DragX As Integer, ByVal DragY As Integer, ByVal DropX As Integer, ByVal DropY As Integer, ByVal Button As MouseButton)
功能:
用于执行从一点拖动到另外一点的操作。
语法:
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
返回值:
无
2. GetAndClearSyncFail
原型:
Function GetAndClearSyncFail As Long
功能:
语法:
输入参数:
返回值:
3. KeyDown
原型:
Sub KeyDown(ByVal Key As Byte)
功能:
模拟一个按键的按下并保持(相当于Win32的KEY_DOWN事件)。
语法:
object.KeyDown( key )
输入参数:
object : Mercury.DeviceReplay对象。
key : 按键的数值码。可查阅后面的“Key Codes 参考”。
返回值:
无
4. KeyUp
原型:
Sub KeyUp(ByVal Key As Byte)
功能:
模拟通过键盘释放某个按下的按键。
语法:
object.KeyUp( key )
输入参数:
object : Mercury.DeviceReplay对象。
key : 按键的数值码。可查阅后面的“Key Codes 参考”。
返回值:
无
5. MouseClick
原型:
Sub MouseClick(ByVal x As Integer, ByVal y As Integer, ByVal Button As MouseButton)
功能:
在指定的屏幕位置执行鼠标左键或右键的单击操作。
语法:
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
返回值:
无
6. MouseDblClick
原型:
Sub MouseDblClick(ByVal x As Integer, ByVal y As Integer, ByVal Button As MouseButton)
功能:
在指定的屏幕位置中执行鼠标左键或右键的双击事件。
语法:
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
返回值:
无
7. MouseDown
原型:
Sub MouseDown(ByVal x As Integer, ByVal y As Integer, ByVal Button As MouseButton)
功能:
在屏幕指定位置按下鼠标左键或右键,并保持按下状态。
语法:
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
返回值:
无
8. MouseMove
原型:
Sub MouseMove(ByVal x As Integer, ByVal y As Integer)
功能:
用于模拟鼠标移动。
语法:
object.MouseMove ( x, y, Button )
输入参数:
object : Mercury.DeviceReplay对象。
x :屏幕坐标X轴的值。
y :屏幕坐标Y轴的值。
返回值:
9. MouseUp
原型:
Sub MouseUp(ByVal x As Integer, ByVal y As Integer, ByVal Button As MouseButton)
功能:
用于释放之前执行的MouseDown方法所按下的鼠标按键。
语法:
object. MouseUp ( x, y )
输入参数:
object : Mercury.DeviceReplay对象。
x :屏幕坐标X轴的值。
y :屏幕坐标Y轴的值。
Button :可能的值包括
LEFT_MOUSE_BUTTON = 0
MIDDLE_MOUSE_BUTTON = 1
RIGHT_MOUSE_BUTTON = 2
返回值:
无
10. PressKey
原型:
Sub PressKey(ByVal Key As Byte)
功能:
模拟通过键盘按下一个按键并立即释放。
语法:
object.PressKey( key )
输入参数:
object : Mercury.DeviceReplay对象。
key : 按键的数值码。可查阅后面的“Key Codes 参考”。
返回值:
无
11. PressNKeys
原型:
Sub PressNKeys(ByVal Key As Byte, ByVal N As Integer)
功能:
模拟通过键盘多次按下一个按键并立即释放。
语法:
object.PressNKeys( key, N )
输入参数:
object : Mercury.DeviceReplay对象。
key : 按键的数值码。可查阅后面的“Key Codes 参考”。
N:重复的次数。
返回值:
无
12. SendString
原型:
Sub SendString(ByVal str As String)
功能:
向激活的窗口发送一个或多个键盘按键,就像敲击键盘一样。
语法:
object.SendString( str )
输入参数:
object : Mercury.DeviceReplay对象。
str : 敲击的字符串。
返回值:
无
13. SetDropSyncTimeout
原型:
Sub SetDropSyncTimeout(ByVal nDropSyncTimeout As Integer)
功能:
语法:
输入参数:
返回值:
14. SetSynchronizationTimeout
原型:
Sub SetSynchronizationTimeout(ByVal nSyncTimeout As Integer, ByVal is_sec As Long)
功能:
设置一个新的同步超时的时间值。
语法:
object. SetSynchronizationTimeout(nSyncTimeout , is_sec)
输入参数:
object : Mercury.DeviceReplay对象。
nSyncTimeout : 同步超时的时间值。
is_sec : 指定设置的时间值是否以秒为单位。
返回值:
无
四. 常量
1. LEFT_MOUSE_BUTTON
原型:
Const LEFT_MOUSE_BUTTON = 0
2. MIDDLE_MOUSE_BUTTON
原型:
Const MIDDLE_MOUSE_BUTTON = 1
3. RIGHT_MOUSE_BUTTON
原型:
Const RIGHT_MOUSE_BUTTON = 2