dai2248157327 2021-01-08 19:44 采纳率: 25%
浏览 86

win10下调用mouse_event的API函数,无法识别Or连接,代码混乱。

win10下调用mouse_event函数,进行移动鼠标操作,发现执行命令,无法实现移动。

代码如下:

Private Declare Sub mouse Lib "user32" Alias "mouse_event" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Private Declare Function GetSystemMetrics32 Lib "user32" Alias "GetSystemMetrics" (ByVal nIndex As Long) As Long '获取分辨率
Private Const MOUSEEVENTF_ABSOLUTE = &H8000 '指定鼠标使用绝对坐标系,此时,屏幕在水平和垂直方向上均匀分割成65535×65535个单元
Private Const MOUSEEVENTF_MOVE = &H1 '移动鼠标
Private Const MOUSEEVENTF_LEFTDOWN = &H2 '模拟鼠标左键按下
Private Const MOUSEEVENTF_LEFTUP = &H4 '模拟鼠标左键抬起
Private Sub shubiaoyidong(ByVal x As Long, ByVal y As Long)
mw = x* 65535 / GetSystemMetrics32(0)
mh = y * 65535 / GetSystemMetrics32(1)
'移动
mouse MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE, mw, mh, 0, 0 
End Sub
Sub test()
shubiaoyidong 998, 745
End Sub

        点击宏运行后,发现鼠标在win10下无法移动,无法执行命令,这里不知道出了什么问题?

       如何将Or改成符号&,则虽然可以这些命令,但是执行命令过程中会实现鼠标右键点击的功能,出现执行混乱的情况,代码不能正常执行,请问大神能找出问题在哪么?我问过相关的经验人员也不能给出合理回答,请各位大神老师帮忙指点一下!

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-24 16:44
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这个问题是由于你没有正确地使用mouse_event函数。mouse_event函数接受四个参数:一个长整型值,表示事件类型(例如MOUSEEVENTF_ABSOLUTEMOUSEEVENTF_MOVE等),两个长整型值,分别代表要移动到的目标位置的X坐标和Y坐标,以及一个长整型值,表示额外的信息(例如,如果你想要改变鼠标的位置,你可以传入0)。但是,在你的代码中,你需要先计算出实际的X和Y坐标,然后传递给mouse_event函数。

    正确的代码应该是这样的:

    Private Declare Sub mouse Lib "user32" Alias "mouse_event" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
    Private Declare Function GetSystemMetrics32 Lib "user32" Alias "GetSystemMetrics" (ByVal nIndex As Long) As Long '获取分辨率
    
    Private Const MOUSEEVENTF_ABSOLUTE = &H8000 '指定鼠标使用绝对坐标系,此时,屏幕在水平和垂直方向上均匀分割成65535×65535个单元
    
    Private Const MOUSEEVENTF_MOVE = &H1 '移动鼠标
    
    Private Const MOUSEEVENTF_LEFTDOWN = &H2 '模拟鼠标左键按下
    
    Private Const MOUSEEVENTF_LEFTUP = &H4 '模拟鼠标左键抬起
    
    Sub test()
    
        Dim x As Long, y As Long
        x = 998
        y = 745
    
        mw = x * 65535 / GetSystemMetrics32(0)
        mh = y * 65535 / GetSystemMetrics32(1)
    
        '移动
        mouse MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE, mw, mh, 0, 0
    
    End Sub
    

    这段代码首先定义了几个常量,然后定义了一个变量来存储目标位置的X和Y坐标。然后,它计算出实际的X和Y坐标,并将其传递给mouse_event函数。最后,它调用了mouse_event函数并传入了所需的参数。

    现在你应该可以在Win10环境下正确地使用mouse_event函数进行鼠标操作了。

    评论

报告相同问题?