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

博主用VB编写模拟鼠标小程序时,遇到mouse_event的move问题。采用绝对坐标模拟移动需进行坐标转换,将屏幕分辨率的坐标转换为65535*65535的点。代码模拟了左键按下、拖动、抬起过程,但程序完成move后会自动点击右键,求解答。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

近期在用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后自动点击右键(即图中黑线结尾的白点,画图中右键为背景色)……很迷,求各位大佬解答.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值