Qt如何模拟鼠标点击?

    前言

    上一篇写到Qt如何实现模拟键盘按键?》,既然程序可以模拟键盘按键,那一定也能模拟鼠标点击吧。果然很容易就找到了mouse_event这个api。不仅可以模拟鼠标点击,还能模拟鼠标移动,滚轮滚动等。

    

    关于mouse_event

    image.png

    mouse_event没有返回值,有5个参数。第一个参数就是操作鼠标的标志(如鼠标左键按下,右键按下等),可选值

   image.png

    第二和第三个参数很明显就是坐标值,如果第一个参数设置了MOUSEEVENTF_ABSOLUTE则表示绝对坐标,否则是相对坐标。你四个参数表示鼠标滚轮滚动的值,如果第一个参数为MOUSEEVENTF_WHEEL才有用。最后一个参数表示鼠标事件的附加信息,不知道有啥用。

    关于相对坐标和绝对坐标的差异:如果是相对坐标(即没有设置MOUSEEVENTF_ABSOLUTE)那第二和第三个参数的单位就是像素。如果是绝对坐标(即设置了MOUSEEVENTF_ABSOLUTE)需要进行换算。dx和dy的取值范围都是0 ~ 65535(单位不是像素)。我们需要将目标坐标转换为到dx和dy取值范围中的某一个值。假设屏幕分辨率为1366x768,目标像素坐标为100,200 那么dx和dy分别为100*65535/1366、 200*65535/768。

     (关于参数dx和dy有一点很奇怪,经过测试dx和dy的值对鼠标按下和鼠标松开并没有作用,也就是说设置了dx和dy后鼠标都是在当前位置按下或松开)。

    

    模拟鼠标点击

    模拟鼠标点击需要先让鼠标移动到指定位置,可以使用MOUSEEVENTF_MOVE。然后点击,使用MOUSEEVENTF_LEFTDOWN和MOUSEEVENTF_LEFTUP。关键代码如下:

    image.png

 代码很简单一看就能懂,例子中被注释的代码SetCursorPos(x,y)也能实现移动鼠标的功能。最后写个例子看看效果:

test.gif

(一个简单的鼠标连点器)

    

演示站
上一篇:Qt如何实现模拟键盘按键?
下一篇:Qt如何嵌入其他程序的窗口?

发表评论