模拟鼠标点击

时间:2022-12-22 18:15:32
怎样做到让屏幕上的鼠标不动(真正意义上的不动),保持在(X1,Y1),然后在(X2,Y2)处模拟一次鼠标点击事件呢(外部程序)。

16 个解决方案

#1


那就要向系统的消息队列里插入鼠标事件了

使用SendInput吧.

#2


http://www.m5home.com/bbs/dispbbs.asp?boardID=2&ID=1283&page=1

这里后面有讲到驱动级模拟的

驱动的代码也有,你看看吧

#3


如果是指定窗口则sendmessage,postmessage都可以
如果是当前窗口mouse_event就可以了

#4


那就要向系统的消息队列里插入鼠标事件了

使用SendInput吧.
---------------------------------------
能再详细点吗?



http://www.m5home.com/bbs/dispbbs.asp?boardID=2&ID=1283&page=1

这里后面有讲到驱动级模拟的

驱动的代码也有,你看看吧
----------------------------------------
虽然是说键盘方面与问题相关不大,不过很值得一看,收藏了。



如果是指定窗口则sendmessage,postmessage都可以
如果是当前窗口mouse_event就可以了
----------------------------------------
mouse_event不仅用于当前窗口,整个屏幕都有效,而且我试了很多次了,始终无法脱离鼠标,单击的地方总是鼠标所在点,即使设置了绝对位置也一样,我要的是鼠标在屏幕里的位置与单击的位置不在同个点上。我给出我的代码,帮我看下是不是哪里有问题,感觉好像是设置绝对位置比起作用。
Option Explicit
    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 _
    )

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

Private Sub Form_Load()
Timer1.Interval = 1000
Timer1.Enabled = True
End Sub

'每隔一秒中模拟一次鼠标事件
Private Sub Timer1_Timer()
    mouse_event MOUSEEVENTF_ABSOLUTE Or MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 100, 100, 0, 0
End Sub
不管有没加MOUSEEVENTF_ABSOLUTE,后边的参数怎么改,单击的位置始终还是屏幕鼠标所在位置,请高手过过目。

#5


虽然是说键盘方面与问题相关不大,不过很值得一看,收藏了。

//

后面有说到鼠标的模拟.

另外,自己写一写SendInput的鼠标包试一下

我之前试过在CS中自动开枪,星际中自动输"show me the money"十次,都是用那个驱动完成的

SendInput在3D程序里面好象并不好使....貌似这类游戏取得鼠标键盘的方式是另一套机制,比如DirectInput...

不过你是在桌面,那就用SendInput吧.

#6


星际中自动输"show me the money"十次

老马好贪心啊

#7


该回复被版主删除

#8


学习

#9


老马好贪心啊

//

哈哈哈哈哈哈

没办法,我星际超菜啊~~~钱用得差不多了就输口令...可是麻烦,我就弄了个Ctrl + F12,按一次就十次,哈哈

#10


直接power overwhelming  不方便点?  挖哈哈

#11


呵呵,我玩的时候是强迫自己不作弊的,感觉这样打赢了比较爽。

谢谢咯,我再研究看看,那天看了那个键盘驱动的知识后我也想过鼠标是不是也可以这样,不过也只是想过去而已,没认真去研究。
多给点东西,我好少走点弯路嘛,别一句一句的,你那个CS中自动开枪的听起来感觉不错,说一下你那套思路行吗。

#12


你那个CS中自动开枪的听起来感觉不错

//

其实就是一个自动压枪,呵呵

我用HOOK拦截鼠标,然后检测

如果按下时间高于0.2-0.4秒,就认为是在连发

于是就自动向下修正枪口

我大概地录了M4,AK,AUG,SIG552这四种枪的弹道,然后反向计算得到修正值,使用Ctrl + F1到F4就可以切换了

不过最终效果很不理想,呵呵

因为在运动中开枪时的弹道与静止时又是不同

后来就懒得搞了~~~~反正好久都没时间玩CS了

#13


哇,,,厉害啊,连弹道这方面都给你想到了,还真是服了你,要是让你搞出来了不天下无敌了,哈哈。

#14


玩星际我也就用用地图全开

#15


我还用 operation cawl

#16


暂时先这样吧,有进展再开新帖。

#17


老马兄

刚才搜到一篇“如何把一个exe注册成系统服务?”,我也想知道这方面的知识。
“可能是一个普通的EXE吧?要自己写一套服务消息处理代码的....”能再说详细点吗,如何弄才能做出一个能服务里运行起来的EXE?
还有就是做好这个特殊的EXE后如何将其变为系统服务?
似乎你有源码哦,可以的话发份给我,当然最好还是指导一下比较好,毕竟在一无所知的情况下去研究一份源码是很累人的事,呵呵,7286729@QQ.COM
先谢过了。

#1


那就要向系统的消息队列里插入鼠标事件了

使用SendInput吧.

#2


http://www.m5home.com/bbs/dispbbs.asp?boardID=2&ID=1283&page=1

这里后面有讲到驱动级模拟的

驱动的代码也有,你看看吧

#3


如果是指定窗口则sendmessage,postmessage都可以
如果是当前窗口mouse_event就可以了

#4


那就要向系统的消息队列里插入鼠标事件了

使用SendInput吧.
---------------------------------------
能再详细点吗?



http://www.m5home.com/bbs/dispbbs.asp?boardID=2&ID=1283&page=1

这里后面有讲到驱动级模拟的

驱动的代码也有,你看看吧
----------------------------------------
虽然是说键盘方面与问题相关不大,不过很值得一看,收藏了。



如果是指定窗口则sendmessage,postmessage都可以
如果是当前窗口mouse_event就可以了
----------------------------------------
mouse_event不仅用于当前窗口,整个屏幕都有效,而且我试了很多次了,始终无法脱离鼠标,单击的地方总是鼠标所在点,即使设置了绝对位置也一样,我要的是鼠标在屏幕里的位置与单击的位置不在同个点上。我给出我的代码,帮我看下是不是哪里有问题,感觉好像是设置绝对位置比起作用。
Option Explicit
    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 _
    )

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

Private Sub Form_Load()
Timer1.Interval = 1000
Timer1.Enabled = True
End Sub

'每隔一秒中模拟一次鼠标事件
Private Sub Timer1_Timer()
    mouse_event MOUSEEVENTF_ABSOLUTE Or MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 100, 100, 0, 0
End Sub
不管有没加MOUSEEVENTF_ABSOLUTE,后边的参数怎么改,单击的位置始终还是屏幕鼠标所在位置,请高手过过目。

#5


虽然是说键盘方面与问题相关不大,不过很值得一看,收藏了。

//

后面有说到鼠标的模拟.

另外,自己写一写SendInput的鼠标包试一下

我之前试过在CS中自动开枪,星际中自动输"show me the money"十次,都是用那个驱动完成的

SendInput在3D程序里面好象并不好使....貌似这类游戏取得鼠标键盘的方式是另一套机制,比如DirectInput...

不过你是在桌面,那就用SendInput吧.

#6


星际中自动输"show me the money"十次

老马好贪心啊

#7


该回复被版主删除

#8


学习

#9


老马好贪心啊

//

哈哈哈哈哈哈

没办法,我星际超菜啊~~~钱用得差不多了就输口令...可是麻烦,我就弄了个Ctrl + F12,按一次就十次,哈哈

#10


直接power overwhelming  不方便点?  挖哈哈

#11


呵呵,我玩的时候是强迫自己不作弊的,感觉这样打赢了比较爽。

谢谢咯,我再研究看看,那天看了那个键盘驱动的知识后我也想过鼠标是不是也可以这样,不过也只是想过去而已,没认真去研究。
多给点东西,我好少走点弯路嘛,别一句一句的,你那个CS中自动开枪的听起来感觉不错,说一下你那套思路行吗。

#12


你那个CS中自动开枪的听起来感觉不错

//

其实就是一个自动压枪,呵呵

我用HOOK拦截鼠标,然后检测

如果按下时间高于0.2-0.4秒,就认为是在连发

于是就自动向下修正枪口

我大概地录了M4,AK,AUG,SIG552这四种枪的弹道,然后反向计算得到修正值,使用Ctrl + F1到F4就可以切换了

不过最终效果很不理想,呵呵

因为在运动中开枪时的弹道与静止时又是不同

后来就懒得搞了~~~~反正好久都没时间玩CS了

#13


哇,,,厉害啊,连弹道这方面都给你想到了,还真是服了你,要是让你搞出来了不天下无敌了,哈哈。

#14


玩星际我也就用用地图全开

#15


我还用 operation cawl

#16


暂时先这样吧,有进展再开新帖。

#17


老马兄

刚才搜到一篇“如何把一个exe注册成系统服务?”,我也想知道这方面的知识。
“可能是一个普通的EXE吧?要自己写一套服务消息处理代码的....”能再说详细点吗,如何弄才能做出一个能服务里运行起来的EXE?
还有就是做好这个特殊的EXE后如何将其变为系统服务?
似乎你有源码哦,可以的话发份给我,当然最好还是指导一下比较好,毕竟在一无所知的情况下去研究一份源码是很累人的事,呵呵,7286729@QQ.COM
先谢过了。