我需要在玩电脑游戏时用我的手指移动鼠标指针。 (比如说crysis3 ..这样我就可以用我的手指移动相机了)。控制鼠标运动
在运动中,当我不玩游戏时,我可以移动鼠标。我为此使用了SetCursorPos()窗口函数。 (运动是完美的,也不但不是一个问题。)
但问题是,这(SetCursorPos)不会对游戏中的效果..
任何人都可以电话我为什么和如何解决这个问题??
谢谢。
我需要在玩电脑游戏时用我的手指移动鼠标指针。 (比如说crysis3 ..这样我就可以用我的手指移动相机了)。控制鼠标运动
在运动中,当我不玩游戏时,我可以移动鼠标。我为此使用了SetCursorPos()窗口函数。 (运动是完美的,也不但不是一个问题。)
但问题是,这(SetCursorPos)不会对游戏中的效果..
任何人都可以电话我为什么和如何解决这个问题??
谢谢。
SetCursorPos
不起作用的原因是因为游戏可能使用低得多的API来捕获鼠标输入,可能类似于DirectInput。
我怀疑你可以拦截该输入的唯一方法是使用过滤器驱动程序。查看回答这个堆栈溢出问题:Intercept mouse input
我尝试使用RAWINPUT。 在运动中,我可以使用我的应用程序中的RAWINPUT来捕捉鼠标位置(相对于最后一个位置)。但那不是我想要的。我想给出相对位置并根据这个改变光标位置。 但我不知道如何改变它。 我试图使用直接输入。但同样的情况发生。我无法弄清楚如何加载位置并将其发送给系统。 – user2389323
正如我所说,我认为你需要创建一个过滤器驱动程序。查看[DDK]中的moufltr示例(http://msdn.microsoft.com/zh-cn/library/windows/hardware/gg487428.aspx)。 –
最后我能得到它的工作.... :)
SendInput()工作
mx = (cordi[0][0]) * screenWidth/(640);
my = (cordi[0][1]) * screenHeight/(480);
INPUT input;
input.type = INPUT_MOUSE;
input.mi.mouseData = 0;
input.mi.dx = -(mx - prevX);//65536 - ((mx - prevX) *(65536/GetSystemMetrics(SM_CXSCREEN)));//x being coord in pixels
input.mi.dy = (my - prevY);//(my - prevY) *(65536/GetSystemMetrics(SM_CYSCREEN));//y being coord in pixels
input.mi.dwFlags = MOUSEEVENTF_MOVE;//MOUSEEVENTF_ABSOLUTE
SendInput(1,&input,sizeof(input));
我用MOUSEEVENTF_ABSOLUTE第一次。 。它没有工作..但后来我用相对运动只是一个预感,它的工作...
你可以尝试'SendInput'。 – chris
感谢您的回复。 我目前使用它来调用鼠标点击..它可以用来移动鼠标吗? – user2389323
是的,我记得,即使点击,也必须通过相对或绝对坐标。我想不通过任何标志点击会移动它。 – chris