马上加入TC
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 一只熊 于 2014-3-14 19:45 编辑
【一只熊】转载注明出处
利用闲暇时间给大家讲讲鼠标偏移的解决办法。
原理其实很简单。
之前遇到这个问题网络上搜索的很多的解决办法都不行。
现在发表一个自己摸索的方法,完美解决这个问题。
为什么那么多别人的方法我这边用不了呢?
这的从游戏反按键类外挂讲起。首先,游戏窗口有一个鼠标,还有一个系统鼠标,那么游戏内的鼠标是跟系统鼠标移动的。有一个算法,计算他们之间的偏移量。由于鼠标移动到游戏窗口中时,只剩下游戏鼠标了,也就是我们看不到系统鼠标,那么肉眼是靠识别游戏鼠标进行的点击,系统鼠标在游戏鼠标一定的偏移范围内不断的变换位置,那么我们模拟挂的时候移动的是系统鼠标所以导致一段时间内点击的位置都不相同。
所以我们的解决办法就是获取系统鼠标在游戏中的位置。和游戏窗口的(0,0)(我们称这个坐标为校准坐标)点计算偏移量,在加上你要点击的位置就不会在出现点击不到的问题了
例如 我现在要点击,(100,100)这个游戏窗口位置,那么。现在由于鼠标偏移了导致我点到(90,90)这个位置。同理如果点击0,0点也就点到-10,-10的位置
那么也就是说我点击110,110这个位置是不是就点击到100,100这个位置了呢?
我们的思路就是把鼠标移动到0,0点。获取鼠标内存位置和0,0点做偏移。(x的偏移量)px=10,(y的偏移量)py=10
我们要点击(100,100)也就是x=100+px,y=100+py 这个才是我们移动的位置。
说了这么多,还是讲下主要的要怎么获取鼠标的内存地址呢?
步骤如下:为了避免沉贴,回复可见
我们调用的时候就封装个函数就可以了
我这边用的校准坐标是(512,0)
- function pMoveTo(intX,intY)
- dm.MoveTo(512,0)
- help.sleep(300)
- x=dm.ReadInt(hwnd,memaddrX,0)
- y=dm.ReadInt(hwnd,memaddrY,0)
- px=x-512
- py=y-0
- dm.MoveTo(intX+px,intY+py)
- help.sleep(300)
- dm.LeftClick()
- help.sleep(500)
- dm.MoveTo(512,0)
- endfunction
复制代码
|