关于VB中使用mouse_event时坐标的问题的解决方案

VB 专栏收录该内容
0 篇文章 0 订阅

近期在用VB编写一个模拟鼠标的小程序,期间遇到了使用mouse_event的move问题.
先放声明(这只是mouse_event的声明,其他的没放上):

Public 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)

Public Const MOUSEEVENTF_MOVE = &H1 '移动鼠标
Public Const MOUSEEVENTF_LEFTDOWN = &H2 '模拟鼠标左键按下
Public Const MOUSEEVENTF_LEFTUP = &H4 '模拟鼠标左键抬起
Public Const MOUSEEVENTF_RIGHTDOWN = &H8 '模拟鼠标右键按下
Public Const MOUSEEVENTF_RIGHTUP = &H10 '模拟鼠标右键抬起
Public Const MOUSEEVENTF_MIDDLEDOWN = &H20 '模拟鼠标中键按下
Public Const MOUSEEVENTF_MIDDLEUP = &H40 '模拟鼠标中键抬起
Public Const MOUSEEVENTF_ABSOLUTE = &H8000 '标示是否采用绝对坐标

声明函数,注意mouse_event要使用小写,大写首字母会出错……(刚开始因为强迫症改成了大写结果报错)
经过系列实验,各种排错,得到的解决方案如下:

    SetCursorPos sPos.X, sPos.Y
    mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
    Delay 1
    mouse_event MOUSEEVENTF_ABSOLUTE & MOUSEEVENTF_MOVE, (sPos.X + Xadd) * 65535 / 1920 * 1.25, (sPos.Y + Yadd) * 65535 / 1080 * 1.25, 0, 0
    Delay 1
    mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0

因为模拟单击双击的代码网上说的也没有太大问题所以略过,对于移动时的效果,本人选择使用绝对坐标(MOUSEEVENTF_ABSOLUTE & MOUSEEVENTF_MOVE),但这个函数是将屏幕划分为65535*65535的点,而不是分辨率的点(本人为1920 * 1080),故要进行坐标转换,具体是

X÷横向分辨×65535,Y÷纵向分辨率×65535

代码中SPos便是开始移动时的位置(X,Y),Xadd和Yadd为位移量,这两个量均是相对于屏幕分辨率(1920 * 1080)而言的;MOUSEEVENTF_LEFTDOWN和MOUSEEVENTF_LEFTUP则对应左键按下抬起,这整个过程就模拟出左键按下——拖动——左键抬起的过程.
图上便是根据指令在画图中绘出的图案,不过有一点问题的是程序会在完成move后自动点击右键(即图中黑线结尾的白点,画图中右键为背景色)……很迷,求各位大佬解答.

  • 0
    点赞
  • 0
    评论
  • 4
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值