2013-06-22 52 views
0

我需要在玩电脑游戏时用我的手指移动鼠标指针。 (比如说crysis3 ..这样我就可以用我的手指移动相机了)。控制鼠标运动

在运动中,当我不玩游戏时,我可以移动鼠标。我为此使用了SetCursorPos()窗口函数。 (运动是完美的,也不但不是一个问题。)

但问题是,这(SetCursorPos)不会对游戏中的效果..

任何人都可以电话我为什么和如何解决这个问题??

谢谢。

+0

你可以尝试'SendInput'。 – chris

+0

感谢您的回复。 我目前使用它来调用鼠标点击..它可以用来移动鼠标吗? – user2389323

+0

是的,我记得,即使点击,也必须通过相对或绝对坐标。我想不通过任何标志点击会移动它。 – chris

回答

0

SetCursorPos不起作用的原因是因为游戏可能使用低得多的API来捕获鼠标输入,可能类似于DirectInput

我怀疑你可以拦截该输入的唯一方法是使用过滤器驱动程序。查看回答这个堆栈溢出问题:Intercept mouse input

+0

我尝试使用RAWINPUT。 在运动中,我可以使用我的应用程序中的RAWINPUT来捕捉鼠标位置(相对于最后一个位置)。但那不是我想要的。我想给出相对位置并根据这个改变光标位置。 但我不知道如何改变它。 我试图使用直接输入。但同样的情况发生。我无法弄清楚如何加载位置并将其发送给系统。 – user2389323

+0

正如我所说,我认为你需要创建一个过滤器驱动程序。查看[DDK]中的moufltr示例(http://msdn.microsoft.com/zh-cn/library/windows/hardware/gg487428.aspx)。 –

0

最后我能得到它的工作.... :)

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第一次。 。它没有工作..但后来我用相对运动只是一个预感,它的工作...