mouse

阅读: 评论:0

mouse

mouse

 '-------------------------------------------
' 模拟鼠标的左键单击和右键单击
'-------------------------------------------
' 洪恩在线 求知无限
'-------------------------------------------
'程序说明:
'本例采用API函数实现模拟的鼠标事件,程序运行后会
'产生十分有趣的效果。也来试一试。
'本例中只使用了相对鼠标坐标,我们也可以使用绝对
'鼠标坐标来试一试。
'-------------------------------------------

'【VB声明】
' Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)

'【说明】
' 模拟一次鼠标事件

'【备注】
' 进行相对运动的时候,由SystemParametersInfo函数规定的系统鼠标轨迹速度会应用于鼠标运行的速度

'【参数表】
' dwFlags -------- Long,下述标志的一个组合
' MOUSEEVENTF_ABSOLUTE
' dx和dy指定鼠标坐标系统中的一个绝对位置。在鼠标坐标系统中,屏幕在水平和垂直方向上均匀分割成65535×65535个单元 -
' MOUSEEVENTF_MOVE 移动鼠标
' MOUSEEVENTF_LEFTDOWN 模拟鼠标左键按下
' MOUSEEVENTF_LEFTUP 模拟鼠标左键抬起
' MOUSEEVENTF_RIGHTDOWN 模拟鼠标右键按下
' MOUSEEVENTF_RIGHTUP 模拟鼠标右键抬起
' MOUSEEVENTF_MIDDLEDOWN 模拟鼠标中键按下
' MOUSEEVENTF_MIDDLEUP 模拟鼠标中键抬起
' dx ------------- Long,根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定水平方向的绝对位置或相对运动'

' dy ------------- Long,根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定垂直方向的绝对位置或相对运动

' cButtons ------- Long,未使用

' dwExtraInfo ---- Long,通常未用的一个值。用GetMessageExtraInfo函数可取得这个值。可用的值取决于特定的驱动程序

 

 

  1. '对API变量的定义
    Const MOUSEEVENTF_LEFTDOWN = &H2
    Const MOUSEEVENTF_LEFTUP = &H4
    Const MOUSEEVENTF_MIDDLEDOWN = &H20
    Const MOUSEEVENTF_MIDDLEUP = &H40
    Const MOUSEEVENTF_MOVE = &H1
    Const MOUSEEVENTF_ABSOLUTE = &H8000
    Const MOUSEEVENTF_RIGHTDOWN = &H8
    Const MOUSEEVENTF_RIGHTUP = &H10
  2. ''鼠标模拟
  3. Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
  4.      
  5. ''鼠标位置
  6. Public Type POINTAPI
  7.     x As Long
  8.     y As Long
  9. End Type
  10. Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
  11.      
  12. '如果同时要模拟两个鼠标事件,可以用 Or 将两个参数连接
  13. '调用了mouse_event函数,其参数的设置见前面说明
  14. '1单击,2右单击,3左双击,4上滚,5,下滚,0移动
  15. ''参数:动作,X,Y,返回?
  16. Public Sub set_mouse(Clk_type As Long, Optional x As Variant = 0, Optional y As Long = 0, Optional isBack As Boolean = False)
  17.     Dim mouseven As Long
  18.     Dim msP As POINTAPI, newMsp As POINTAPI
  19.     mouseven = 0
  20.     
  21.     newMsp.x = x
  22.     newMsp.y = y
  23.     Debug.Print TypeName(x)
  24.     If x > 0 Or y > 0 Then mouseven = MOUSEEVENTF_MOVE Or MOUSEEVENTF_ABSOLUTE
  25.     
  26.     ''如果需要返回,则记录原位置
  27.     If isBack Then GetCursorPos msP
  28.     
  29.     If Clk_type = 1 Then '这里是 鼠标左键按下 和松开两个事件的组合即一次单击
  30.         mouse_event mouseven Or MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, newMsp.x, y, 0, 0
  31.     ElseIf Clk_type = 2 Then '模拟鼠标右键单击事件,
  32.         mouse_event mouseven Or MOUSEEVENTF_RIGHTDOWN Or MOUSEEVENTF_RIGHTUP, newMsp.x, y, 0, 0
  33.     ElseIf Clk_type = 3 Then '两次连续的鼠标左键单击事件 构成一次鼠标双击事件
  34.         mouse_event mouseven Or MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, newMsp.x, y, 0, 0
  35.         mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, newMsp.x, y, 0, 0
  36.     ElseIf Clk_type = 4 Then '上滚
  37.         mouse_event mouseven Or MOUSEEVENTF_MIDDLEUP, newMsp.x, y, 0, 0
  38.     ElseIf Clk_type = 5 Then '下滚
  39.         mouse_event mouseven Or MOUSEEVENTF_MIDDLEDOWN, newMsp.x, y, 0, 0
  40.     Else
  41.         mouse_event mouseven, newMsp.x, y, 0, 0
  42.     End If
  43.     
  44.     ''如果需要返回,则记录原位置
  45.     If isBack Then set_mouse 0, msP.x, msP.y, False
  46. End Sub
  47. Public Sub getMsPos(msPos As POINTAPI)
  48.     GetCursorPos msPos
  49. End Sub

本文发布于:2024-01-29 06:27:18,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170648084313345.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:mouse
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23