2017-04-08 119 views
-1

我正在尝试记录游戏中的鼠标移动情况,以便我可以回放它。游戏是使命召唤4,尽管这与这个问题无关。与此相关的是,大多数第一人称射击游戏在您移动鼠标光标时会重新居中,这样您就不会碰到任何边界。搜索一段时间后,我无法找到关于此在线的任何信息。我目前使用鼠标钩(WH_MOUSE)来跟踪鼠标移动(WM_MOUSEMOVE)。当我列出这些消息时,我可以看到光标被拉回screenResolutionX/2,screenResolutionY/2(屏幕中心)。在游戏重新居中前获取游标在游戏中的位置

我第一次尝试解决这个问题就是忽略这些消息,如果它们等于屏幕中心,所以当我回放这些鼠标移动时,重新居中会被忽略。我认为这可以解决问题,但现在当我回放鼠标移动时,鼠标变得太远(与我记录的方式不同)。当我在游戏的主菜单中进行相同的录制/回放(光标未被重新居中)时,回放非常准确。我的问题是:考虑到游戏会重新集中光标,我该如何准确记录游戏中的鼠标移动?

在此先感谢。

编辑:让我澄清我在问什么。我只想记录实际的用户鼠标输入,而不是重新集中鼠标光标的游戏。

+0

听起来像你应该拦截鼠标**之前,**他们被发送到游戏的窗口。虽然我不确定如何去做这件事,但TBH – YePhIcK

+0

我已经遇到过SO帖子,但我不同意驱动程序/过滤器是完成我所要做的事情所必需的。只有当我想在鼠标数据到达Windows之前拦截鼠标数据时,情况才会如此,而不是在重新集中之前我想拦截它。也许有一种方法可以确定鼠标消息的来源,如果它是由游戏进程发送的,那么我会忽略它?我找不到像这样的东西.. –

+0

“Windows”是一个超载的术语。在上面的上下文中,“窗口”的意思是“游戏的窗口”,而不是“Windows的操作系统” – YePhIcK

回答

-1

为了拦截这些鼠标消息,您必须创建过滤器驱动程序或钩子。这里有一个很好的文章(附代码)关于这个问题:

http://www.oblita.com/interception.html

物品为在此基础上Windows API: SetWindowsHookEx和应和你一个很好的起点。

+0

我正在使用Windows挂钩,正如我在原始帖子中提到的那样。但是,游戏还会发送重新集中WM_MOUSEMOVE消息。我也收到了这些信息,这意味着我无法确定实际的鼠标移动(因为有时WM_MOUSEMOVE包含鼠标的小移动和重新居中,所以我无法将其过滤掉)。我不认为过滤器驱动程序是完成我想要的。拦截不是问题 - 我想能够区分重新居中和实际鼠标输入。 –

+0

由于您知道屏幕的几何形状和当前鼠标位置(如果有的话 - 至少基于以前截取的鼠标移动消息),您总是可以知道鼠标移动消息是否将其移动到中心位置。这不正确吗? – YePhIcK

+0

但我怎么能区分使用移动鼠标靠近中心与游戏重新居中? –