关于DirectX游戏中鼠标指针的问题...
我自己用DirectInput获取的鼠标位置总是和系统鼠标指针的位置有出入的,DirectInput的鼠标明显比系统鼠标要快很多,也就是说移动幅度大,每次都会比系统鼠标多移动一大块出去...查了一下,有高人说是绝对坐标和相对坐标的问题+_+
但是我看那些网游的鼠标指针移动速度都很正常...于是就做了个实验,小白鼠是腾讯代理的C9.
这个游戏平时是不显示鼠标指针的,移动鼠标会导致视角的变化.此时hook directInput函数,投放一些鼠标移动的假数据,游戏的视角会跟着转,说明此时使用的是directInput的数据.
游戏按ctrl会出现一个菜单,这时候鼠标指针就出现了,可以操控鼠标指针去点击菜单上的按钮什么的.这个指针是和系统的鼠标指针完全同步的.
首先,我在directInput函数中投放假数据,无效.然后干脆把directInput函数pass掉了,结果是鼠标指针依然正常显示,悬停在按钮上按钮也会正常变亮,但是点击等操作无效.说明鼠标指针的坐标不是从directInput函数得来的,但鼠标其他操作来自directinput.
然后,很自然就想到了会不会直接用的消息中的坐标,于是hook peekmessage,把消息里的pt强制改成500,500.测试,指针依然正常...索性直接把peekmessage pass掉,直接返回false...此时游戏窗口没有焦点的时候鼠标指针依然正常,即鼠标指针在窗口范围外为正常的白色三角样式,移动到游戏窗口范围内就会变成游戏里那种古铜色三角的样式,同时指针显示的坐标没有问题.
最后...难不成是GetCursorpos? hook getcursorpos,强制返回500,500 依然无效
把pass directinput函数,hook peekmessage,getcursorpos三种办法一起使用...c9依然正常的显示了鼠标指针
真想不明白了...求指点